罗兰在MATLAB的艺术

把想法变成MATLAB

如果停止

今天的帖子的来源肖恩·德Wolski,我的一个同事应用工程师。你可能会认出他来MATLAB的答案选择的博客!

你曾经想要的MATLAB暂停在调试模式下当满足一定条件时?也许当一个特定的题目文件从一个目录读取或迭代循环,产生一个意想不到的结果吗?也许这循环迭代几十或几百次迭代的问题出现,你不想一步一步走过在调试模式?

在这篇文章中,我们将调查几个不同的方法来处理这个问题。

内容

键盘

我正在跟一个MATLAB用户最近的优点键盘我不是一个大风扇的函数。键盘拉你进入调试模式一旦遇到。他们声称这样难以调试在满足特定的条件。

这是一个简单的示例场景。厘米是摄影师图片:

imshow (CM)

这是一个简单的算法显示有多少像素比中的每个像素值uint8范围的255年[0]

xg = 0 (256);2 = 0:255 xg (2 + 1) = (CM(:) > 2)总和;结束情节(0:255 xg) ylabel (“像素大于X”)轴

迭代125左右似乎给我问题;我期望曲线是积极的到255年。

我想看看发生了什么在后续迭代125和。一种方法是在计算行断点,点击运行,然后点击继续按钮125次希望我不要在节奏和不小心跳过它。这有一些明显的缺点,它没有规模和耗费时间。

该方法与键盘看起来像这样:

xg = 0 (256);2 = 0:255如果2 = = 125键盘结束结束

现在在125迭代,我们进入if语句,可以在调试模式下进入区域的问题。这很简单,是一种安全,体面的解决方案。然而,它需要改变代码来调试它,需要再做一次改变我们固定的错误。

DBSTOP……

如果我们可以停止什么?你可以!dbstop,功能潜在的断点,支持广泛的金宝app条件断点

这些可以从断点菜单中设置断点或编辑选项卡dbstop直接。这是相同的代码封装在一个函数调用badForLoop

函数badForLoop (CM) xg = 0 (256);2 = 0:255 xg (2 + 1) = (CM(:) > 2)总和;结束情节(0:255 xg) ylabel (“像素大于X”)轴结束

从断点设置菜单中,选择“设定状态”,光标在直线上你想停止。

然后输入你的条件;任何有效的MATLAB代码将在这里工作。

以编程方式设置相同的断点:

dbstopbadForLoop4如果(2 = = 125)
badForLoop(厘米);

测试和清理

如果你认为你有一个修复,您可以禁用断点没有清理它通过点击黄色断点(X将会出现指示它禁用)。如果问题解决了,再次点击断点会清楚或者你可以通过右击再允许它。可以从菜单中结算可以用dbclear

的类似的工作流程键盘将强调选择和评论到“禁用”,然后删除清除。

这个玩具的修复问题是图像存储为一个int8射程(-128 127)而不是一个uint8与范围255年[0]

奖金

此外,dbstop有一些预定义的停止条件包括错误,警告,或如果nan或正遇到。如果你还没有发现dbstop如果错误然而,我强烈建议给它一试。当一个错误发生时,它停止,您可以查看世界的状态时发生错误。

评论

你有任何调试战争故事,这些技巧可以帮助吗?其他用途键盘命令吗?让我们知道在这里




发表与MATLAB®R2017a

|
  • 打印
  • 发送电子邮件

评论

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