2012-12-22 26 views
0

只是好奇Mathematica用户在遇到运行时错误时如何调试其代码。 我觉得Mathematica功能非常强大,大多数编程任务都可以用 代替,但是如果它有缺陷,调试的不便将抵消它的优点。Mathematica调试

我知道Workbench,但启动起来很麻烦,而且它的基于Java的IDE编译起来有点慢。

回答

1

TraceTracePrint都可以得心应手。我也喜欢来界定“任何说法”的定义来警告我不确定调用,如

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) 

当工作台,这些错误定义断点的好地方。

0

具有特定参数的跟踪(这个函数通过了什么等)是一个有用的工具。然而,最通用的方法是立即评估工作笔记本中的代码片段,找到第一个地方发生的事情,您没有预料到或者不在包装代码需要的形状中。这也有助于如果你从头开始编写模块化代码。

3

回声函数现在内置,并在跟踪发生错误时非常有用。

"Echo[x_]:=Module[{},Print[x];x]" 

为了说明:查找列表中的元素等于y的数量,取模4

input = [email protected]; 
target = 3; 

foobar[list_, y_] := [email protected][list, y == Mod[4, #] &] 
foobar[input, target] 

,则返回0,尽管存在是在工作范围内的多个号码之后。 修改foobar的使用回声调试:

foobar[list_, y_] := [email protected][list, y == Echo[Mod[4, #]] &] 

将迅速表明国防部的论点是向后从预期的效果。