Debugging 如何找到需要花费很长时间才能完成的动态对象?

Debugging 如何找到需要花费很长时间才能完成的动态对象?,debugging,dynamic,wolfram-mathematica,Debugging,Dynamic,Wolfram Mathematica,M 8.0.1,windows 7 调试问题 有时,当我启动M并打开我的笔记本(在我关闭它之前,笔记本中已启用了动态功能)时,我会收到此消息 问题是,无论我点击wait,还是禁用dynamics,消息都会不断返回 我必须从windows任务管理器中终止进程本身(即Mathematica)才能摆脱此问题 很明显,我的代码中的动力学部分似乎有一个bug 我的问题是:M有没有办法告诉我是哪个动态对象导致了这个问题?任何关于为什么告诉它禁用动态更新的想法在这里都没有帮助(因为我一直收到消息) 谢谢你可

M 8.0.1,windows 7

调试问题

有时,当我启动M并打开我的笔记本(在我关闭它之前,笔记本中已启用了动态功能)时,我会收到此消息

问题是,无论我点击wait,还是禁用dynamics,消息都会不断返回

我必须从windows任务管理器中终止进程本身(即Mathematica)才能摆脱此问题

很明显,我的代码中的动力学部分似乎有一个bug

我的问题是:M有没有办法告诉我是哪个动态对象导致了这个问题?任何关于为什么告诉它禁用动态更新的想法在这里都没有帮助(因为我一直收到消息)

谢谢

你可能会发现大卫·贝利写的这本书很有用。它是一个调试器,也可用于调试动态构造。在本文档中,有一个关于如何调试此类程序的示例。基本上,您可以在代码中设置一个断点,然后运行它,完成后,您将看到关于何时发生的详细信息

总的来说,我强烈建议您尝试一下,不仅仅是为了动态功能。

您可能会发现,David Bailey的著作非常有用。它是一个调试器,也可用于调试动态构造。在本文档中,有一个关于如何调试此类程序的示例。基本上,您可以在代码中设置一个断点,然后运行它,完成后,您将看到关于何时发生的详细信息


总的来说,我强烈建议您尝试一下,不仅仅是为了动态功能。

您可以通过评估以下内容来获得一些运气:

SetOptions[$FrontEnd,PrintKernelDynamicTraffic->True]

这将导致Mathematica前端在向内核发送动态计算时将消息打印到系统控制台(在Mac上,我不知道它在Windows上的位置)。如果您可以在消息出现时找到要打印的最后一个动态评估,则应该是需要很长时间进行评估的动态评估


您可能希望在完成调试时禁用此功能,这样它就不会在您的系统日志中填充数百万条调试消息。

您可以通过评估以下内容来获得一些运气:

SetOptions[$FrontEnd,PrintKernelDynamicTraffic->True]

这将导致Mathematica前端在向内核发送动态计算时将消息打印到系统控制台(在Mac上,我不知道它在Windows上的位置)。如果您可以在消息出现时找到要打印的最后一个动态评估,则应该是需要很长时间进行评估的动态评估


您可能希望在完成调试后禁用此功能,这样它就不会在您的系统日志中填入数百万条调试消息。

您能给我们一个导致此问题的笔记本的简化版本吗?动态评估可能有点棘手,如果不看代码就很难判断问题的原因。@Mike,我希望能给你一个简化的。但这是一个演示,其中运行着任务、事件处理程序和许多动态,到处都是刷新。但我发现,如果我继续点击“继续等待”的时间比我之前做的要长(2-3分钟),它实际上会回来。在我点击几次并放弃之前。因此,这是一个时间问题。我的代码中似乎有一些动态错误。我花在Mathematica代码中调试动力学的时间比添加新代码的时间要多:)我想知道Workbench是否可以帮助调试动力学代码?您能给我们一个您正在使用的笔记本的简化版本吗?它会导致此问题?动态评估可能有点棘手,如果不看代码就很难判断问题的原因。@Mike,我希望能给你一个简化的。但这是一个演示,其中运行着任务、事件处理程序和许多动态,到处都是刷新。但我发现,如果我继续点击“继续等待”的时间比我之前做的要长(2-3分钟),它实际上会回来。在我点击几次并放弃之前。因此,这是一个时间问题。我的代码中似乎有一些动态错误。我花在Mathematica代码中调试动力学的时间比添加新代码的时间要多:)我想知道Workbench是否可以帮助调试动力学代码?谢谢,我尝试了上面的方法,但似乎什么都没做。这有文件记录吗?我在谷歌上搜索了一下,没有看到任何地方提到它。我使用的是V8.0.1我在上面的意思是,我没有看到任何新消息进入控制台或笔记本。我本来可以做些什么,但我看不到。@Nasser这确实会将消息发送到系统控制台(也就是说,在OS X上,您可以在/private/var/log/system.log中找到消息)。我不知道windows系统上的等价物是什么。我明白了。我认为“系统控制台”是指Mathematica控制台(即Windows->Messages)。我也不确定操作系统控制台现在在windows上的什么位置。我会找的。谢谢。@nasser这不是一个文档化的功能。它出现在选项检查器的“未记录”类别中,您可以在选择“格式”>“选项检查器”时按住Option/alt键来访问该类别。。。从菜单栏。谢谢,我尝试了上面的方法,但似乎什么也没做。这有文件记录吗?我在谷歌上搜索了一下,没有看到任何地方提到它。我使用的是V8.0.1我在上面的意思是,我没有看到任何新消息进入控制台或笔记本。我本来可以做些什么,但我看不到。@Nasser这确实会将消息发送到系统控制台(也就是说,在OS X上,您可以在/private/var/log/system.log中找到消息)。我不知道windows系统上的等价物是什么。我明白了。我认为“系统控制台”是指Mathematica控制台(即Windows->Messages)。我也不确定操作系统控制台现在在windows上的什么位置。我会找的。谢谢。@nasser,这是