2011-09-18 141 views
4

對我來說調試最困難的事情之一是Mathematica說它檢測到一個問題,但它沒有在控制檯上顯示一條消息。如何在運行代碼期間讓Mathematica打印控制檯警告消息?

此圖

enter image description here

我調試的方式就像是打印的消息。我有不同級別的調試消息,並且可以在出現問題時打開和關閉它們以幫助我找到位置。我的所有調試信息都發送到控制檯。

由於Mathematica不會向控制檯輸出這些警告/錯誤,因此無法找到此消息來自何處。如果確實如此,那麼我會知道,因爲我可以在它之前看到我自己的消息,並知道發生此錯誤的位置和時間。

點擊小的'+'來查看錯誤是在事實之後,並且它不會告訴消息的位置。

我去編輯/首選項,並且擁有一切開啓打印到控制檯,我可以看到:

enter image description here

順便說一句,這個特殊的「錯誤」是(當我點擊「+」 )

InterpolatingFunction::dmval: Input value {0} lies outside the range 
of data in the interpolating function. Extrapolation will be used. >> 

只有當我用手點擊'+'時纔打印到控制檯。我希望在發生時自動完成。

所以,我的問題是,如何使Mathematica將以上消息打印到控制檯,何時發生?

ps。我不知道如何使用WB來調試代碼。

感謝,

編輯1

我發現了錯誤,它是一個變量的名稱的拼寫錯誤。如果有人想看到它,我把筆記本本身,並將錯誤恢復。對不起,我不打算嘗試在小程序中複製這個,但這個筆記本將說明問題in this folder有筆記本電腦(.nb )如果有人想看到它。

的錯誤是我寫的,一半一路下滑筆記本上述所謂的「solve[]」模塊中,在該行,我設置局部變量此功能,以下

Module[{numericalSolution, ic, t, ndsolveOptions, x1, x2, x3, x1de, 

最後一個變量上面應該是「x1der」而不是「x1de」爲:

Module[{numericalSolution, ic, t, ndsolveOptions, x1, x2, x3, x1der, 

固定這一點,造成錯誤走開。

只需運行筆記本,當它出現時,您將看到UI單元格支架上的錯誤,但控制檯上沒有錯誤。 (程序不完整,但工作完成後,將在我的網站上的Mathematica演示頁面,它是一個三重擺的模擬)。

再次提問,如何讓Mathematica在檢測到時將此錯誤打印到控制檯。

謝謝。

+0

我認爲如果您提供一個小型自包含示例來生成一些令您惱火的消息單元格,那麼您將有更好的機會得到一個很好的答案,以便更清楚地知道您究竟想要什麼避免。 –

+0

@Leonid,這個問題真的不是關於這個特定的錯誤(我確實在代碼中發現了問題,並在3小時後找到了問題,我在變量名中有一個錯字,這是它的副作用)。問題是一個普遍的問題:有時Mathemtica,就像在這種情況下,在運行代碼時發現錯誤,但它不會將錯誤或警告輸出到控制檯。它僅在UI單元邊緣指示上述錯誤。問題是如何配置mathematica以將錯誤輸出到控制檯。我會盡量在小程序中複製這個,但是目前它發生在一個較大的程序中。謝謝。 – Nasser

+0

@Leonid和其他任何人。我把這個'錯誤'鏈接到筆記本上,以防有人想看到它。請參閱上面的修改。 – Nasser

回答

2

從屏幕截圖看,您看起來像使用Manipulate。 Manipulate(和其他動態構造)使用紅括號來隱藏警告和錯誤的原因是這些消息在交互過程中可能發生很多次,使得前端無法響應。

要回答你關於調試的問題,這裏有一種可能的方法。考慮這個簡單的操縱,這將拋出一個警告,當您將滑塊移動到X = 0:

Manipulate[1/x, {{x, 1}, -3, 3, 1}] 

要了解信息,您可以在右上角點擊圓圈加號,並選擇「選擇性粘貼快照」。這將粘貼一段代碼,這段代碼等同於Manipulate中的代碼與這些參數設置。在這種情況下,我得到:

DynamicModule[{x = 0}, 1/x] 

我可以評估這一點並觀察筆記本中的Power :: infy消息。在這個特定的例子中,現在是 明確問題是什麼。在更復雜的示例中,您可以使用快照作爲起點來計算出問題可能出在哪裏。