在一次跑代码的过程中,遇到了(找不到尝试执行工作进程的 parfor 循环的源代码)的错误信息。在此之前,代码是可以正常运行的,我只是改了parfor循环中的代码,而且反复检查也没有发现问题……
问题再现
MATLAB提示的报错信息如下:
定位到提示的错误位置,代码如下:
%% 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
循环前设置断点,然后在命令行内输入该循环代码,我得到了以下答案:
是的,没错;是改之后的代码有问题,但是直接在程序里运行没有明确的错误提示。
省流总结
- 找不到尝试执行工作进程的 parfor 循环的源代码的报错信息,一般来说意味着的循环内部的代码有问题
- 解决方法:
- 在
parfor
循环前设置断点,在命令行运行该循环程序 - 将
parfor
循环改为for
循环,同样可以显示报错信息,同时还可以定位到具体的错误位置(最优方法)
- 在
$\cdots$ end $\cdots$