我有一個C++項目,其中調試和發佈模式中的beahviour不同。例如。在釋放模式下,我得到錯誤的分配錯誤wheras在調試模式everthing運行良好。也許這種差異來自不同的運行時速度。在不調試符號的情況下調試
您是否有任何提示和提示如何在沒有標準調試器(如gdb)的情況下調試程序?我可以嘗試在關鍵領域做很多事情,但這似乎不是最聰明的方法...也許有一種方法可以獲取某些類型錯誤的位置信息,而無需使用調試符號?有沒有工具?
我有一個C++項目,其中調試和發佈模式中的beahviour不同。例如。在釋放模式下,我得到錯誤的分配錯誤wheras在調試模式everthing運行良好。也許這種差異來自不同的運行時速度。在不調試符號的情況下調試
您是否有任何提示和提示如何在沒有標準調試器(如gdb)的情況下調試程序?我可以嘗試在關鍵領域做很多事情,但這似乎不是最聰明的方法...也許有一種方法可以獲取某些類型錯誤的位置信息,而無需使用調試符號?有沒有工具?
如果您可以從崩潰中獲取堆棧跟蹤,稍後您可以對其進行符號化。例如,在MacOS上有工具atos
其中,根據man
頁:
數字地址轉換成其象徵當量。
這將允許您運行沒有符號,但稍後使用它們。
對於GNU工具鏈,相當於將'addr2line '。然而,這只是部分相關質疑。 – keltar
你確定差異是由調試符號產生?什麼是編譯命令來生成調試/釋放二進制文件? – tristan
您可以在發佈版本中使用調試符號,它不應該改變程序的行爲。如果你正在調試之間有問題/釋放然後建立很可能你有一些不確定的行爲,或者是造成問題未初始化的變量。 –
是一個錯誤的alloc錯誤異常嗎?你能用stacktrace捕捉並記錄異常嗎?每個版本實際使用多少內存? – doctorlove