在 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。