wolfram-mathematica – 如何在运行代码期间使Mathematica打印以控制警告消息?

对我来说,调试最难的事情之一就是当Mathematica说它检测到一个问题时,但是当它没有向控制台打印消息时.

像这个图

我调试的方式是打印消息.我有不同级别的调试消息,可以在有问题帮助我找到位置时打开和关闭它们.我的所有调试消息都转到控制台.

由于Mathematica不会向控制台打印这些警告/错误,因此无法找到此消息的来源.如果确实如此,那么我会知道,因为我可以在它之前看到我自己的消息,并知道这个错误发生在何时何地.

单击“小”以查看错误是在事实之后,并且它不会告诉消息的位置.

我去了编辑/偏好设置,并打开所有内容打印到我可以看到的控制台:

顺便说一句,这个特殊的’错误’是(当我点击”时)

InterpolatingFunction::dmval: Input value {0} lies outside the range 
of data in the interpolating function. Extrapolation will be used. >>

只有当我点击”手动时,它才会打印到控制台.我想要在发生这种情况时自动完成.

所以,我的问题是,如何使Mathematica将上述消息打印到控制台,当它发生时?

PS.我不知道如何使用WB来调试操作代码.

谢谢,

编辑1

我发现了错误,它是变量名称中的拼写错误.如果有人想看到它,我把笔记本本身,并重新输入错误.我很抱歉,我不会尝试在小程序中复制这个,但这个笔记本将说明问题in this folder有笔记本(.nb )如果有人想看到它.

错误是我写的,在称为’solve []’的模块中,在笔记本的上半部分,在我为此函数设置局部变量的行中,以下

Module[{numericalSolution, ic, t, ndsolveOptions, x1, x2, x3, x1de, 

上面的最后一个变量应该是’x1der’而不是’x1de’,如下所示:

Module[{numericalSolution, ic, t, ndsolveOptions, x1, x2, x3, x1der, 

解决这个问题,导致错误消失.

只需运行笔记本,当它出现时,您将在UI单元格支架上看到错误,但控制台上没有错误. (程序不完整,但工作完成后,将在我的网站Mathematica演示页面上,它是三重摆的模拟).

再次提问,如何让Mathematica在检测到错误时将此错误打印到控制台.

谢谢.

最佳答案 从屏幕截图看起来你正在使用Manipulate.使用红色括号来隐藏警告和错误的Manipulate(和其他动态构造)的原因是这些消息在交互时可能会发生很多次,使前端无响应.

要回答有关调试的问题,这是一种可能的方法.考虑这个简单的Manipulate,当你将滑块移动到x = 0时会发出警告:

Manipulate[1/x, {{x, 1}, -3, 3, 1}]

要了解该消息,您可以单击右上角带圆圈的加号并选择“粘贴快照”.这将使用这些参数设置粘贴一段与Manipulate中的代码等效的代码片段.在这种情况下,我得到:

DynamicModule[{x = 0}, 1/x]

我可以评估一下并观察笔记本中的Power :: infy消息.在这个特定的例子中,现在是
清楚问题是什么.在更复杂的示例中,您可以使用快照作为图的起点
问题可能是什么.

点赞