在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
实际确实设置断点,但它将其设置为MyClass
的第1行,而不是MyClass.mymeth
的开头。我没有测试如果mymeth
超载会发生什么。ms = ?MyClass; meth = ms.MethodList(strcmp({ms.MethodList.Name}, 'mymeth'))
,为我的方法提供了一个meta.method
对象。但是,dbstop
想要一个字符串,所以我不能设置断点。尽管meta.method告诉我定义类,但它并没有告诉我定义方法的行号,所以我也不能设置这样的断点。然后,剩下的就是从meta.method
确定定义类,在图形交互编辑器中打开相应的文件,搜索定义方法的行,并手动设置断点。这非常耗时,只有在使用图形时才有效。
有没有办法进入交互式调用的方法,或者在方法的开头以编程方式设置断点?我正在使用2013a。
答案 0 :(得分:5)
以下语法适用于我的计算机上的简单测试:
dbstop in MyClass.m at MyClass.mymeth