3

我正在尝试在 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 会这样做?我怎样才能让它不这样做?

4

2 回答 2

3

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

不幸的是,这是编辑器的一个已知错误。开发部门已经意识到这个问题,并计划在未来的版本中修复它。作为一种解决方法,您可以使用包含单个语句的行

键盘

而不是设置断点。您可以轻松地注释/注释此行。

JHC

于 2014-08-25T16:59:19.723 回答
1

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

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

于 2013-07-30T17:20:40.930 回答