MATLAB社区

MATLAB、社区和更多

添加调试代码在不改变代码


我想艾特威尔肯欢迎嘉宾的MATLAB技术营销团队。肯偶尔会在这里写博客的肯和迈克在MATLAB桌面博客。

一样有用的设施像断点和MATLAB的交互式的环境,我相信我们中的许多人仍在使用“老学校”调试技术的时候。其中最主要的是散射disp语句在您的代码,然后梳理输出去的地方已失败的东西。这肯定是特别的,但它得到了工作。

这有一个明显的缺点,即稍后您将需要删除所有的调试代码。不是一个不可能完成的任务,特别是如果你有一个基线在源代码控制下“diff”,但它是一个容易出错的步骤。一个尴尬的时刻在我的职业生涯是当我离开生产代码调试语句。一夜之间,回归测试引擎毫不客气地技艺高超的每夜构建和我走进办公室第二天嘲笑的合唱。都很有趣和小伤害,但是这促使我去寻找替代品。

输入条件断点,看似不太可能的盟友。如果你没有使用条件断点日期,我鼓励你去尝试。他们是非常有用的,当你需要通过多次断点运行您的应用程序进入(或方法)一个错误状态。

使用一个条件断点的技巧是简单的条件将会升值总是被评估,但断点只会触发如果条件的求值结果为非零值。条件可以“x > 0”或“min (x {:}) > 0”,甚至鼓……”流(x % d \ n, x)”。基本上,它可以是任何表达式,评估价值。不幸的是,这意味着我们不能(直接)使用disp,因为disp不返回一个值。这是,你会得到一个错误如果你试图做一些像“y = disp (x)”。

所以,让我们试着用一个“无条件”断点显示一个字符串。在您最喜欢的代码设置一个断点。然后,右击断点,选择“设置/修改条件”。

条件”流(“Hello, World ! \ n”)”。现在运行这段代码,您将看到“Hello, World !”写入命令窗口。我们没有修改源代码本身,所以我们不需要记住以后的变化。条件断点也用黄色显示在桌面,区分好从正常吗(红色)断点。

现在你可能会说,“但是我的程序停止运行断点,我希望我的节目继续!“现在我们需要关注自己的条件。文档流将提醒我们,返回字符串的长度。在我们的例子中,这是14(在我的窗户框)。这是不为零,所以调试器停止执行。我们需要增强我们的条件总是评估为false。类似于“0 = =流(“Hello, World ! \ n”)”上大做文章。在这里,返回的值相比,14日,将对零(0)值不相等,所以这个表达式的求值结果为逻辑错误(零)。这意味着调试器将继续运行程序。

使这一变化条件断点并重新运行您的程序。它仍然显示我们插入的消息,但现在这个项目贯穿断点。

等待…但是如果你打印的东西可能是长度为零,意义0 = = 0,这意味着逻辑正确,这意味着我的程序stops-when-I-don不想吗?实际上,这是不可能发生的,因为“\ n(换行)保证至少一个字符的输出。但是,如果你没有这样的保证,可以防止零长度与下面的滑稽表情,总是计算错误:

0 = =流()& & 0

& & 0“执行一个合乎逻辑的和为零,保证一个错误(0)评价总体而言,这意味着在这个断点调试器永远不会打破。

使用类似的技术,人们可以暂时无损注入几乎任何行为他们的应用程序。

如果您曾经使用过条件断点在一个非传统的方式,无论是在MATLAB或其他应用程序中,我们想听它,从你的经验中学习和创造力。


——肯•艾MathWorks

|
  • 打印
  • 发送电子邮件

评论

留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。