MATLAB社区

MATLAB,社区和更多

添加调试代码而不更改代码


我想欢迎来自Matlab技术营销团队的Guest Blogger Ken。肯偶尔会在这里博客Ken&Mike在Matlab桌面上博客。

随着突触点和Matlab的互动环境等设施,我相信我们许多人仍然不时使用“旧学校”调试技巧。其中的主要是散射disp在整个代码中的陈述,然后通过输出梳理以尝试发现某些东西已经出错的地方。这是肯定的,但它完成了工作。

但是,这是一个明显的缺点,即您稍后需要删除所有调试代码。不是一个不可能的任务,特别是如果您在源控制下有基线到“差异”反对,但它是一个错误易一步的步骤。我职业生涯中更令人尴尬的时刻是我在生产代码中留下调试声明的时候。一夜之间,回归测试引擎在夜间建造上毫不客气勃勃地参加,我第二天进入办公室到了一个杰尔合唱。所有乐趣和伤害都没有,但这促使我寻找替代方案。

输入条件断点,一个看似不可能的盟友。如果您迄今未使用有条件的断点,我鼓励您尝试它们。当您在应用程序进入(或接近)错误状态之前,您需要多次运行断点时非常有用。

使用条件断点的诀窍是简单地理解条件将会总是将被求值,但是只有当条件求值为某个非零值时才会触发断点。条件可以是"x> 0“, 要么 ”min(x {:})> 0“,或者甚至……鼓声……”fprintf('x为%d \ n',x)”。基本上,它可以是评估某些值的任何表达式。不幸的是,这意味着我们不能(直接)使用disp, 自从disp没有返回值。也就是说,如果你尝试做类似的事情,你会收到错误“y = disp(x)”。

因此,让我们尝试使用“非条件”断点来显示字符串。在最喜欢的代码段中设置断点。然后,右键单击该断点并选择“设置/修改条件”。

创造条件”FPRINTF('你好,世界!\ n')”。现在运行该代码,您将看到“Hello, World!”写入命令窗口。我们这样做时没有修改源代码本身,所以我们不需要记住以后要回退更改。条件断点在桌面上也显示为黄色,很好地区别于普通(红色)断点。

现在,您可能会说,“但是我的程序在那个断点停止运行了,我希望我的程序继续运行!”现在我们需要关注条件句本身。文档流将提醒我们返回字符串的长度。在我们的例子中,这是14(在我的Windows机器上)。这不是零,因此调试器停止执行。我们需要扩大条件,使它的值总是为假。类似于“0 = =流(“Hello, World ! \ n”)“会做诀窍。在这里,返回的值FPRINTF., 14,将与0(0)进行比较。这两个值不相等,因此该表达式的计算结果为逻辑false(0)。这意味着调试器将继续运行程序。

使这一变化对您的条件断点并重新运行您的程序。它仍然显示我们插入的消息,但程序现在根据需要运行断点。

等等,但是如果您打印的内容实际上可能是长度为0的,那该怎么办呢0 == 0.,意味着逻辑真实,这意味着我的程序停止 - 当我不想要 - 它 - 它 -实际上,这不能发生在这里,因为'\ n'(换行符)保证至少一个输出的性格。但是,如果你没有这样的保证FPRINTF.,您可以使用以下有趣的表达式防止零长度案例,始终评估为false:

0 == fprintf(something) && 0

这 ”&& 0."执行逻辑AND to 0,保证整个计算结果为false(0),这意味着调试器永远不会在这个断点中断。

使用这样的技术,可以临时地、非破坏性地将几乎任何行为注入到应用程序中。

如果您以非传统方式使用了条件断点,请在Matlab或其他应用程序中,我们很乐意听到它并从您的经验和创造力中吸取教训。


——肯·阿特维尔《数学原理

|
  • 打印
  • 发送电子邮件

评论

要发表评论,请点击在这里要登录您的MathWorks帐户或创建新的。