Matlab:显示完整的错误路径

时间:2015-09-30 02:00:31

标签: matlab

考虑以下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)

1 个答案:

答案 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 ';']);

这绝对是一个未经测试的黑客攻击,我无法保证它不会在一个真正不合时宜的时刻中断。