【问题标题】:Why does MATLAB delete breakpoints in my classdef?为什么 MATLAB 会删除我的 classdef 中的断点?
【发布时间】: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


【解决方案1】:

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

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

键盘

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

JHC

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-08-17
      • 1970-01-01
      • 2013-11-10
      • 2020-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-02
      相关资源
      最近更新 更多