如何以编程方式在方法的开头放置断点?

时间:2013-10-22 16:58:15

标签: matlab oop debugging

在Matlab中,当我想通过调试器运行一个函数时,我可以输入dbstop func,它在func.m的第一个代码行放置一个断点。然后,当我拨打func(...)时,我可以逐步完成该功能。

方法有没有等价物?如果我想调试obj.meth()的交互式调用,这些替代方案都不起作用:

  • dbstep in只有在要调试的代码是我正在调试的函数的一部分时才有效,而不是我以交互方式调用它
  • dbstop obj.mymethdbstop MyClass/mymethdbstop MyClass.mymethCannot find function MyClass.mymeth而失败。
  • 所以,也许它被视为一个子功能。但是,dbstop in MyClass at mymethCannot find function "mymeth" within "MyClass"而失败。这个实际上让我感到惊讶。请注意,即使它可以工作,我仍然需要先找出定义类。
  • dbstop mymeth实际确实设置断点,但它将其设置为MyClass的第1行,而不是MyClass.mymeth的开头。我没有测试如果mymeth超载会发生什么。
  • 接下来,我通过元类和元方法尝试了它:ms = ?MyClass; meth = ms.MethodList(strcmp({ms.MethodList.Name}, 'mymeth')) ,为我的方法提供了一个meta.method对象。但是,dbstop想要一个字符串,所以我不能设置断点。尽管meta.method告诉我定义类,但它并没有告诉我定义方法的行号,所以我也不能设置这样的断点。

然后,剩下的就是从meta.method确定定义类,在图形交互编辑器中打开相应的文件,搜索定义方法的行,并手动设置断点。这非常耗时,只有在使用图形时才有效。

有没有办法进入交互式调用的方法,或者在方法的开头以编程方式设置断点?我正在使用2013a。

1 个答案:

答案 0 :(得分:5)

以下语法适用于我的计算机上的简单测试:

dbstop in MyClass.m at MyClass.mymeth