首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mathematica Debug

Mathematica Debug
EN

Stack Overflow用户
提问于 2012-12-22 21:08:47
回答 3查看 464关注 0票数 0

我只是好奇当遇到运行时错误时,Mathematica用户如何调试他们的代码。我觉得Mathematica是如此强大,大多数编程任务都可以用它来替代,但是当它有but时,调试的不便抵消了它的优势。

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

EN

回答 3

Stack Overflow用户

发布于 2016-11-07 06:56:38

现在内置了echo函数,它对跟踪发生错误的位置非常有帮助。

代码语言:javascript
复制
"Echo[x_]:=Module[{},Print[x];x]"

示例:求取模4后,列表中等于y的元素数

代码语言:javascript
复制
input = Range@20;
target = 3;

foobar[list_, y_] := Length@Select[list, y == Mod[4, #] &]
foobar[input, target]

返回0,尽管该范围内有多个有效的数字。使用echo修改foobar以进行调试:

代码语言:javascript
复制
foobar[list_, y_] := Length@Select[list, y == Echo[Mod[4, #]] &]

很快就会发现Mod的论据与预期的效果相反。

票数 3
EN

Stack Overflow用户

发布于 2012-12-22 23:06:56

TraceTracePrint都很方便。我还喜欢定义“任意参数”的定义来警告我未定义的调用,比如

代码语言:javascript
复制
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中,这些错误定义是断点的绝佳位置。

票数 1
EN

Stack Overflow用户

发布于 2015-02-20 01:49:09

带有特定参数(这个函数传递了什么,等等)的跟踪是一个有用的工具。不过,最通用的方法是立即评估工作笔记本中的代码片段,以定位发生意外或不符合包装代码需要的形状的第一个位置。如果您从一开始就编写模块化代码,这也会有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14003091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档