我正在尝试在MATLAB R2011b中调试面向对象的应用程序,而我自己并没有编写。为此,我想在classdef
中的方法中放置一个断点。据我所知,这是允许的。然而,当我运行应用程序时,断点神秘地消失了。
我在clear
中配置了断点,如下所示:
dbstop in clear
查看何时调用clear
。在运行应用程序之前,我使用dbstatus检查是否存在断点:
>> dbstatus
Breakpoint for Processor>Processor.setResult is on line 114.
Breakpoint for inputCompute is on line 30.
Breakpoint is set for m_interpreter>clear.
(有问题的断点是列表中的第一个断点。)当我运行应用程序时,classdef中的断点在调用第一个clear之前消失:
>> rootFunction('configuration')
417 clear('Data');
K>> dbstatus
Breakpoint for inputCompute is on line 30.
Breakpoint is set for m_interpreter>clear.
为了确定断点被清除的位置,我逐渐移动了一个越来越接近根函数起点的断点,并找到了有问题的代码行:
cd('./configs');
果然 - 任何cd
的调用,甚至是间接调用,都会清除classdef
中的断点。这意味着run
完全相同。这是令人愤怒的行为。为什么MATLAB会这样做?我如何防止这样做?
答案 0 :(得分:3)
我发现了同样的错误并将其报告给了Matlab。他们说:
不幸的是,这是编辑器的一个已知错误。发展 部门意识到了这个问题,并计划在将来修复它 发布。作为解决方法,您可以使用包含单个行的行 声明
键盘
而不是设置断点。您可以轻松评论此行。
JHC
答案 1 :(得分:1)
如果该类仅在您的路径上,因为它位于当前目录中,则在代码运行时更改当前目录可能会产生意外结果,包括清除断点。
使用“设置路径”对话框或addpath
函数将代码的目录添加到MATLAB路径中。这样,即使您更改了当前目录,MATLAB也可以访问它,这应解决您的调试问题。