获取在Matlab代码中执行的实际行

时间:2014-08-21 15:55:25

标签: matlab

我有这个问题一直困扰着我,我找不到答案。

我目前正与一位同事一起研究Matlab代码很长时间。我们每个人都在代码的不同部分工作而不会相互干扰。为了更好地在代码中定位自己并遵循程序流程,我放了一些disp(),以便我知道代码何时到达某一行。

例如:

% code
    disp('You have reached line 1000')
% code...

然而,当我或我的同事在disp()命令之上添加/删除/修改代码行时,这可能很麻烦,因此我在disp()中手动输入的行不再准确。

我的问题:有没有办法在程序到达的代码中打印实际行号?这可能是一个非常天真的问题,但我想知道它是否完全可能。

2 个答案:

答案 0 :(得分:7)

您可以检查dbstack。以下是包含示例的文档,具体取决于您要打印的内容:http://www.mathworks.co.uk/help/matlab/ref/dbstack.html

快速示例,您可以放入文件debug_point.m

%// Tested on Octave only, Matlab might be slightly different
function debug_point()
    d = dbstack(1);
    d = d(1);
    fprintf('Reached file %s, function="%s", line %i\n', d.file, d.name, d.line)
end

然后你可以调用这个函数。您只需更改此功能即可轻松关闭所有打印件。

答案 1 :(得分:3)

我认为没有简单的方法来获取行号并显示它。

话虽这么说,我通常会处理这样的情况:

不显示(或写入日志)代码当前所在的行,而是显示代码当前正在执行的操作。像这样:

% code
    disp('Accepting answer on Stack Overflow')
% code...

当然,如果你的代码功能突然改变,你仍然需要担心,但这需要仔细处理。


如果你真的想显示行号,这是我能想到的最简单的:

  1. 添加具有可识别模式的内容,例如:%LineNumberForDisplay<123>
  2. 运行一个遍历该文件的脚本,找到这些模式并用正确的数字替换该数字
  3. 这个'更新'需要在每次运行之前或每次更改之后进行,这使得它有点不实用。