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

ger*_*rit 3 oop debugging matlab

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

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

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

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

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

cha*_*pjc 5

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

dbstop in MyClass.m at MyClass.mymeth
Run Code Online (Sandbox Code Playgroud)