3

在 Matlab 中,当我想通过调试器运行一个函数时,我可以键入dbstop func,这会在func.m. 然后,当我调用 时func(...),我可以逐步完成该功能。

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

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

然后,剩下的就是从 中确定定义类,meta.method在图形交互编辑器中打开对应的文件,搜索定义方法的行,手动下断点。这很耗时,并且仅在以图形方式工作时才有效。

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

4

1 回答 1

5

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

dbstop in MyClass.m at MyClass.mymeth
于 2013-10-22T17:04:33.993 回答