【发布时间】:2023-04-10 02:03:02
【问题描述】:
我正在尝试在 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 会这样做?如何防止它这样做?
【问题讨论】:
-
我无法重现您描述的行为。你能提供一个SSCCE吗?
-
@FlorianBrucker 很难提供 SSCCE ......我需要一个 classdef 文件和一个 main 函数,所以需要两个文件。我对 OOP 也很陌生,我必须进行此调试才能了解发生了什么。您说您无法重现我所描述的行为。你能发布你的SSCCE吗?然后我可以在我的 MATLAB 安装上对其进行测试并进行比较。
-
该类的 m 文件是在您的 MATLAB 路径中还是在当前目录中,或两者兼而有之?使用 MATLAB 找到的代码时,更改目录可能会产生奇怪的影响,因为它位于当前目录中,并且当当前目录也在路径上时,它同样会感到困惑。
-
@StephenBosch:可以发布多个文件,只要它们不包含太多不必要的细节。发布我的代码不会有太大帮助,因为它不会显示您的问题。确保按照 kwatford 的建议检查您的 MATLAB 路径(使用
path命令)。 -
@kwatford 它似乎与路径有关。如果我在另一个目录中尝试在文件中设置断点,则会出现一个对话框,提示“要在此文件中设置断点,您可以更改 MATLAB 当前文件夹,或将其文件夹添加到 MATLAB 路径中。”在典型的 MATLAB 方式中,没有任何解释。我通过用“addpath”语句替换有问题的“cd”来解决我的断点问题;虽然我不觉得这特别令人满意,但它确实让我可以工作。你为什么不发布这个效果的答案,我会认出来?
标签: matlab matlab-class