2011-06-09 48 views
0

我有一個很大的C++代碼(某些應用程序的服務器)。 這個應用程序很大,平均每2個月發生一次崩潰。 我無法模擬這個崩潰,以gdb趕上她。POSIX上的C++崩潰轉儲

是否存在一些很酷的api來分析崩潰轉儲(stacktrace,local vars)上的內存?

捕捉堆棧損壞時間的最佳方法是什麼?

+1

(如Let_Me_Be他回答說)執行它們能你運行valgrind嗎?也許你可以在事故發生之前看到事情出錯的證據? – 2011-06-09 10:07:41

+0

@Jeff Foster:我現在就試試。 – Svisstack 2011-06-09 10:19:36

回答

3

啓用核心轉儲,等待它崩潰。然後像往常一樣加載內核到gdb中並進行調試。

ulimit -c unlimited

+0

已經設置爲無限制,並且二進制文件用符號編譯,那麼我應該有一些轉儲文件,我可以在哪裏找到這些文件? – Svisstack 2011-06-09 10:10:34

+0

@Svisstack核心應該在程序的工作目錄中。如果程序沒有改變,它應該在您運行它的目錄中。它應該被命名爲core,或者core.number(或者使用一些類似的方案)。 – 2011-06-09 10:13:59

+0

我沒有這個文件,我搜索過/。爲什麼我無法存檔這些文件? – Svisstack 2011-06-09 10:17:17

0

有幾件事情可以做:
1單元測試你的代碼,並使用的valgrind
2.使核心轉儲