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

获取在Matlab代码中执行的实际行,matlab,Matlab,这个问题困扰了我一段时间,我找不到答案 我目前正在与一位同事一起编写一个相当长的Matlab代码。我们每个人都处理代码的不同部分,而不相互干扰。为了更好地在代码中定位自己并遵循程序流程,我放置了一些disp(),以便知道代码何时到达某一行 例如: 但是,当我或我的同事在disp()命令上方添加/删除/修改代码行时,这可能会让人感到麻烦,因为我在disp()中手动输入的代码行不再准确 我的问题:是否有办法打印程序到达的代码中的实际行号?这可能是一个非常幼稚的问题,但我想知道这是否有可能 我认为没有

这个问题困扰了我一段时间,我找不到答案

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

例如:

但是,当我或我的同事在disp()命令上方添加/删除/修改代码行时,这可能会让人感到麻烦,因为我在disp()中手动输入的代码行不再准确


我的问题:是否有办法打印程序到达的代码中的实际行号?这可能是一个非常幼稚的问题,但我想知道这是否有可能

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

尽管如此,我通常会这样处理这种情况:

% code
    disp('Accepting answer on Stack Overflow')
% code...
我不显示(或写入日志)代码当前所在的行,而是显示代码当前正在执行的操作。大概是这样的:

% code
    disp('Accepting answer on Stack Overflow')
% code...
当然,如果您的代码功能突然改变,您仍然需要担心,但无论如何,这都需要小心处理


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

  • 添加具有可识别模式的内容,例如:
    %LineNumberForDisplay
  • 运行一个脚本,遍历该文件,找到这些模式,并用正确的数字替换该数字

  • 这种“更新”需要在每次运行之前或每次更改之后进行,这使得它有点不实用。

    您可以检查dbstack。以下是带有示例的文档,具体取决于您要打印的内容:

    快速示例,您可以将其放入文件
    debug\u 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
    

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

    您的意思是这只能用于常规代码中吗?我考虑过它,但认为它只能在调试模式下工作。(像大多数调试命令一样)我个人不会在“常规”代码中使用它,它更像是一个快速的“printf”调试函数。对于“regular/release”代码,我在过去实现了一个合适的logger类(具有不同于可以打开/关闭的日志级别…),类似于python日志模块。但我想很多人对这个问题有不同的看法,以及应该如何做:)