为什么MATLAB在我的classdef中删除断点?

时间:2013-07-24 14:12:20

标签: matlab matlab-class

我正在尝试在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会这样做?我如何防止这样做?

2 个答案:

答案 0 :(得分:3)

我发现了同样的错误并将其报告给了Matlab。他们说:

  

不幸的是,这是编辑器的一个已知错误。发展   部门意识到了这个问题,并计划在将来修复它   发布。作为解决方法,您可以使用包含单个行的行   声明

     

键盘

     

而不是设置断点。您可以轻松评论此行。

JHC

答案 1 :(得分:1)

如果该类仅在您的路径上,因为它位于当前目录中,则在代码运行时更改当前目录可能会产生意外结果,包括清除断点。

使用“设置路径”对话框或addpath函数将代码的目录添加到MATLAB路径中。这样,即使您更改了当前目录,MATLAB也可以访问它,这应解决您的调试问题。