我只是好奇当遇到运行时错误时,Mathematica用户如何调试他们的代码。我觉得Mathematica是如此强大,大多数编程任务都可以用它来替代,但是当它有but时,调试的不便抵消了它的优势。
我知道Workbench,但它启动起来很麻烦,而且它基于Java的IDE编译起来有点慢。
发布于 2016-11-07 06:56:38
现在内置了echo函数,它对跟踪发生错误的位置非常有帮助。
"Echo[x_]:=Module[{},Print[x];x]"示例:求取模4后,列表中等于y的元素数
input = Range@20;
target = 3;
foobar[list_, y_] := Length@Select[list, y == Mod[4, #] &]
foobar[input, target]返回0,尽管该范围内有多个有效的数字。使用echo修改foobar以进行调试:
foobar[list_, y_] := Length@Select[list, y == Echo[Mod[4, #]] &]很快就会发现Mod的论据与预期的效果相反。
发布于 2012-12-22 23:06:56
Trace和TracePrint都很方便。我还喜欢定义“任意参数”的定义来警告我未定义的调用,比如
f[0] := 1
f[1] := 1
f[n_Integer?Positive] := (f[n]=f[n-1]+f[n-2])
f[wrong___] := ( Print["f had wrong arguments: ",{wrong}]; $Failed)在Workbench中,这些错误定义是断点的绝佳位置。
发布于 2015-02-20 01:49:09
带有特定参数(这个函数传递了什么,等等)的跟踪是一个有用的工具。不过,最通用的方法是立即评估工作笔记本中的代码片段,以定位发生意外或不符合包装代码需要的形状的第一个位置。如果您从一开始就编写模块化代码,这也会有所帮助。
https://stackoverflow.com/questions/14003091
复制相似问题