在一次跑代码的过程中,遇到了(找不到尝试执行工作进程的 parfor 循环的源代码)的错误信息。在此之前,代码是可以正常运行的,我只是改了parfor循环中的代码,而且反复检查也没有发现问题……

问题再现

MATLAB提示的报错信息如下:

命令行提示的错误信息1

定位到提示的错误位置,代码如下:

%% rsHRF_deconv_job.m
if flag_parfor
    parfor ii=1:nvar
        hrf1 = hrfa(:,ii);
        PARA(:,ii) = rsHRF_get_HRF_parameters(hrf1,1);% estimate HRF parameter
        event_number(ii)=length(event_bold{1,ii});
    end
else
    for ii=1:nvar
        hrf1 = hrfa(:,ii);
        PARA(:,ii) = rsHRF_get_HRF_parameters(hrf1,para.TR/para.T);% estimate HRF parameter
        event_number(ii)=length(event_bold{1,ii});
    end
end

分析解决问题

我只知道在此之前,代码是运行成功的;当我改了rsHRF_get_HRF_parameters函数后,程序开始运行错误。但是令人费神的是,我怎么也看不出来改之后的代码有什么问题(尽管我怀疑它有问题)。

然后我想到了一个办法,在该parfor循环前设置断点,然后在命令行内输入该循环代码,我得到了以下答案:

命令行提示的错误信息2

是的,没错;是改之后的代码有问题,但是直接在程序里运行没有明确的错误提示。

省流总结

  1. 找不到尝试执行工作进程的 parfor 循环的源代码的报错信息,一般来说意味着的循环内部的代码有问题
  2. 解决方法:
    • parfor循环前设置断点,在命令行运行该循环程序
    • parfor循环改为for循环,同样可以显示报错信息,同时还可以定位到具体的错误位置(最优方法

$\cdots$ end $\cdots$