2011-08-20 76 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

相關問題