Matlab社区

Matlab,社区和更多

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


我要欢迎来自MATLAB技术营销团队的客座博主Ken Atwell。Ken偶尔会在这里写博客Ken和Mike在MATLAB桌面博客。

与断点和MATLAB的交互环境一样有用,我相信我们中的许多人仍然不时地使用“老式”调试技术。其中最主要的是分散DISP.语句,然后梳理输出,试图找出出错的地方。这当然是临时的,但它能完成任务。

但是,这有一个明显的缺点,即稍后需要删除所有调试代码。这并不是不可能完成的任务,特别是如果您在源代码控制下有一个基线来“diff”,但是这仍然是一个容易出错的步骤。在我的职业生涯中,最尴尬的时刻之一是我在产品代码中留下了一个调试语句。一夜之间,回归测试引擎在夜间构建时突然吐了出来,第二天我在一片嘲笑声中走进办公室。一切都很有趣,几乎没有伤害,但这促使我去寻找其他的选择。

输入条件断点,一个看起来不太可能的盟友。如果您到目前为止还没有使用过条件断点,我鼓励您尝试一下。当您需要在应用程序进入(或接近)错误状态之前多次运行断点时,它们非常有用。

使用条件断点的技巧是简单地理解条件会总是评估,但如果条件评估到某些非零值,则只会触发断点。条件可以是“x > 0”或“分钟(x {:}) > 0“,或甚至......鼓滚动......”Fprintf (' x is %d\n ', x)”。基本上,它可以是任何计算出某个值的表达式。不幸的是,这意味着我们不能(直接)使用DISP.,因为DISP.不返回值。也就是说,如果你试图这样做,你会得到一个错误y = disp (x)”。

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

使条件“流(“Hello, World ! \ n”)”。现在运行那段代码,你会看到“你好,世界!”写入命令窗口。我们在没有修改源代码本身的情况下这样做,所以我们不需要记住稍后退出变化。条件断点在桌面中也显示为黄色,从正常中区分它(红色)断点。

关于现在你可能会说的,“但我的程序停止在该断点运行,我希望我的程序继续!”现在我们需要与条件本身关注自己。Doc FPRINFF.将提醒我们,返回字符串的长度。在我们的情况下,这是14(在我的Windows框中)。这不是零,所以调试器停止执行。我们需要增加我们的条件,以始终评估为假。就像是 ”0 == fprintf('Hello,World!\ n')就会有效果。在这里,返回值14,将与零(0)进行比较。值不等于,因此此表达式评估为逻辑假(零)。这意味着调试器将继续运行该程序。

对条件断点进行此更改并重新运行程序。它仍然显示我们插入的消息,但是程序现在按照需要通过断点运行。

等待......但是如果你正在打印一些实际长度为零的东西,意味着什么0 = = 0也就是说,当我不想让程序停止时,程序就会停止?事实上,这在这里不可能发生,因为\ n ..'(换行符)保证输出至少一个字符。但是,如果你没有这样的保证,你可以用下面这个看起来很滑稽的表达式来防止零长度的情况,它的计算结果总是为false:

0 == fprintf(某物)&& 0

& & 0“执行逻辑且零,保证误报(0)评估总体,这意味着调试器将永远不会在此断点中断。

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

如果您曾经以非常规的方式使用过条件断点,无论是在MATLAB或其他应用程序中,我们很乐意听到它,并从您的经验和创造力中学习。


- 肯特旁,Mathworks

|
  • 打印
  • 发送电子邮件

注释

要留下评论,请点击这里登录到您的MathWorks帐户或创建一个新帐户。