2008-08-28 112 views
7

我確定這發生在人們面前,某些東西在調試模式下工作,在發佈版中編譯,並且某些事情中斷。調試發佈模式應用程序的最佳方式

在嵌入式XP環境下工作時發生了這種情況,我發現最好的方法是編寫一個日誌文件以確定它會出錯的位置。

你有什麼經驗/發現試圖解決惱人的發佈模式錯誤?

回答

0

如果它只是需要調試的應用程序的一小部分,那麼您可以只更改那些源文件而不進行優化。據推測,您可以爲所有構建生成調試信息,因此這會使應用程序大部分與發佈時一樣運行,但可以讓您正確調試有趣的部分。

0

如何使用Trace語句。他們在那裏進行發佈模式值檢查。

Trace.WriteLine(myVar); 
3

請確保您有良好的調試符號可用(甚至在嵌入式設備上即使使用發佈版本也可以這樣做)。你應該能夠獲得堆棧跟蹤,並希望得到一些變量的值。彙編語言的良好知識在這一點上可能也很有用。

我的經驗是,通常這個錯誤與破損區域附近的代碼有關。也就是說,如果你看到函數「LoadConfigInfoFromFile」中出現的問題,那麼你可能應該先從密切分析問題開始,而不是「DrawControlsOnScreen」,如果你明白我的意思。 「遠程幽靈般的行爲」類型的錯誤往往不會經常出現(雖然他們這樣做,他們往往是一個主要的熊)。

0

我同意日誌文件調試以縮小範圍。

我已經使用「輸入函數名」「離開函數名」,直到我可以找到它在崩潰前進入的方法。然後我添加更多的日誌消息重新編譯並重新發布。

0

除了玩關閉優化和/或打開你的發佈版本的調試信息,因爲pauldoo說,一個日誌文件將有利於數據。我曾經編寫過一個「跟蹤」應用程序,它可以捕獲應用程序的跟蹤日誌,如果該應用程序在發佈版本開始運行時運行(否則結果將在調試器下運行時進入調試器的輸出窗口)。我能夠讓最終用戶通過電子郵件向我發送日誌文件,以再現他們所看到的錯誤,這是我至少在一種情況下發現問題的唯一方法。

0

雖然它可能在嵌入式環境中無法使用,但我在運行WinDbg以調試發佈模式的Windows應用程序方面運氣不錯。即使應用程序沒有使用符號信息進行編譯,您至少可以獲得可用的堆棧跟蹤以及大量其他有用的崩潰信息。

0

您也可以將您的調試符號複製到即使在RELASE模式已經編譯生產環境

Here的更多信息

0

如果你的問題是同步相關傾銷日誌文件中的文章可能有問題。
在這種情況下,我通常會使用一些大的字符串數組並在問題重現後將其轉儲到屏幕/文件。
這當然取決於你的內存限制,有時候如果平臺上的內存有限,我只用幾個符號和數字來存儲數組。閱讀這些日誌並不是一件大好事,但有時這是唯一的選擇。

2

Tracefile總是一個好主意。 當它是關於崩潰時,我使用adplus,這是Windows調試工具的一部分。基本上adplus做的是,它將windbg附加到您正在監控的可執行文件。當應用程序崩潰時,您會收到故障轉儲和日誌文件。您可以將崩潰轉儲加載到您首選的調試器中,並查明哪條指令導致崩潰。

由於發佈版本與調試版本相比經過了大量優化,所以編譯代碼的方式會影響其行爲。這基本上是在發佈版本中發生多線程代碼崩潰時發生的,而不是調試版本。 adplus和windbg幫助我找出發生的地方。

ADPlus的在這裏解釋: httx://support.microsoft.com/ SCID = KB%3Ben美%3B286350 & X = 15 & Y = 12

基本上你需要做的是: 1.下載並安裝的WinDbg到C:\調試器 httx://www.microsoft.com/whdc/devtools/debugging/default.mspx

  • 啓動應用程序

  • 打開一個cmd和CD到c:\調試器

  • 啓動ADPlus這樣的:

  • 「adplus.bat -crash your_exe.exe」

  • 重現崩潰

  • 分析故障轉儲在VS2005或在WinDbg中

  • 相關問題