2011-08-20 81 views
1

M 8.0.1,windows 7.如何找到哪些动态对象花费很长时间才能完成?

一个调试问题。

有时,当我开始M和打开我的笔记本电脑(其中有在启用它之前,我关闭了它的动态),我得到这个消息

enter image description here

的问题是,不管我点击的等待,或禁用动态,消息不断回来。

我必须从Windows任务管理器中终止进程本身(即Mathematica)才能摆脱这一点。

很明显,我似乎在我的代码中有一个动态的bug。

我的问题是:有没有办法让M告诉我哪些动态对象导致这个问题?而任何想法为什么告诉它禁用动态更新在这里没有帮助(因为我不断收到消息)。

感谢

+0

你可能给我们一个你正在处理的笔记本的简化版本导致这个问题?动态评估可能有点棘手,并且很难在没有看到代码的情况下判断问题的原因。 –

+0

@Mike,我希望我能给你一个简单的。但是这是一个演示程序,运行它的任务,事件处理程序和许多动态,都会刷新整个地方。但是我发现,如果我继续打“继续等待”的时间比我所做的要长(2-3分钟),它实际上会回来。在我点击几次并放弃之前。所以,这是一个时间问题。我的代码中似乎有一些动态错误。我花费更多时间在Mathematica代码中调试动态,而不是花时间添加新代码:)我不知道Workbench是否可以帮助调试dyanmics代码? – Nasser

回答

6

您可以通过评估有一些运气:

SetOptions[$FrontEnd, PrintKernelDynamicTraffic -> True]

这将导致数学前端消息打印到系统控制台(在Mac上,我不知道它会在Windows上)只要它将动态评估发送给内核。如果您可以在信息出现时找到最后一次打印的动态评估,那应该是需要很长时间才能评估的动态评估。

当您完成调试时,您可能会希望将其禁用,因此它不会在系统日志中填充数百万条调试消息。

+0

谢谢,我试过以上,但似乎没有做任何事情。这是记录在某处吗?我GOOGLE了它,并没有看到它提到任何地方。我正在使用V 8.0.1 – Nasser

+0

我的意思是在上面,我没有看到任何新消息去控制台或笔记本。我本来可以做些事情,但不是我能看到的。 – Nasser

+2

@Nasser这会将消息发送到系统控制台(也就是说,在OS X上,您可以在/private/var/log/system.log中找到消息)。我不知道Windows系统上的等效物是什么。 – acl

4

您可能会发现DebugTrace,由大卫贝利写的,有用的。它是一个调试器,它也可以用来调试动态结构。在这个文档中有一个关于如何调试这样的程序的例子。基本上,你在你的代码中设置了一个断点,运行它,完成之后,你会看到关于发生什么事的详细信息。

一般来说,我强烈建议给它一个尝试,而不仅仅是动态功能。

+0

+1,谢谢,我下载了这个包并将使用它。我确实发现了我的动态错误,是在演示中的初始化代码中。只花了10个小时才找到;)。希望Mathematica具有更好的诊断和调试工具内置。任何人都知道是否可以使用工作台来调试基于Manipulate的代码和其他动态代码? – Nasser

+1

@Nasser - 只是猜测...如果您正在运行通过Workbench启动的笔记本,以前对SetOptions [$ FrontEnd,PrintKernelDynamicTraffic - > True]的建议将(可能...)在Workbench中将动态信息打印到控制台。 – telefunkenvf14

相关问题