考虑以下foo.m
文件:
try
disp(r3)
catch ME
disp(getReport(ME))
end
当我用它运行时:
matlab -nodisplay -nodesktop -nosplash -nojvm -wait -r "run('foo.m')"
我明白了:
Undefined function or variable 'r3'.
Error in foo (line 2)
disp(r3)
Error in run (line 96)
evalin('caller', [script ';']);
我想知道是否可以显示错误中引用的那些文件的完整路径。我知道我可以使用which
,例如,获取:
» which run
C:\prog-lang\matlab\toolbox\matlab\lang\run.m
但我希望错误直接显示为
Error in C:\prog-lang\matlab\toolbox\matlab\lang\run.m (line 96)
而不是
Error in run (line 96)
答案 0 :(得分:1)
一个选项就是破解getReport
返回的错误报告,例如使用此函数搜索并用文件的完整路径替换“foo”的每个实例 -
function msg = getReportFull(e)
stack = dbstack();
stack(1) = [];
msg = getReport(e);
for i = 1:length(stack)
fname = stack(i).name;
fpath = which(stack(i).file);
msg = strrep(msg, ['>' fname '<'], ['>' fpath '<']);
end
end
然后使用“foo.m”中的以下代码 -
try
disp(r3);
catch e
disp(getReportFull(e));
end
你会发现这个错误 -
>> run('foo.m')
Undefined function or variable 'r3'.
Error in C:\foo.m (line 2)
disp(r3);
Error in C:\Program Files\MATLAB\R2012b\toolbox\matlab\lang\run.m (line 64)
evalin('caller', [script ';']);
这绝对是一个未经测试的黑客攻击,我无法保证它不会在一个真正不合时宜的时刻中断。