2013-10-11 96 views
0

我有一個C++項目,其中調試和發佈模式中的beahviour不同。例如。在釋放模式下,我得到錯誤的分配錯誤wheras在調試模式everthing運行良好。也許這種差異來自不同的運行時速度。在不調試符號的情況下調試

您是否有任何提示和提示如何在沒有標準調試器(如gdb)的情況下調試程序?我可以嘗試在關鍵領域做很多事情,但這似乎不是最聰明的方法...也許有一種方法可以獲取某些類型錯誤的位置信息,而無需使用調試符號?有沒有工具?

+0

你確定差異是由調試符號產生?什麼是編譯命令來生成調試/釋放二進制文件? – tristan

+2

您可以在發佈版本中使用調試符號,它不應該改變程序的行爲。如果你正在調試之間有問題/釋放然後建立很可能你有一些不確定的行爲,或者是造成問題未初始化的變量。 –

+0

是一個錯誤的alloc錯誤異常嗎?你能用stacktrace捕捉並記錄異常嗎?每個版本實際使用多少內存? – doctorlove

回答

0

如果您可以從崩潰中獲取堆棧跟蹤,稍後您可以對其進行符號化。例如,在MacOS上有工具atos其中,根據man頁:

數字地址轉換成其象徵當量。

這將允許您運行沒有符號,但稍後使用它們。

+0

對於GNU工具鏈,相當於將'addr2line '。然而,這只是部分相關質疑。 – keltar

相關問題