2012-07-31 29 views
0

我在Windows上用MinGW GCC編譯C++代碼。我目前正在處理偶爾會在多線程程序中彈出的SIGSEGV,所以我無法像通常那樣通過GDB逐步完成程序。我已經閱讀了程序日誌,但他們只是告訴我發生問題的位置。當Windows應用程序中出現SIGSEGV時,我可以獲取堆棧跟蹤嗎?

我可以得到問題發生地點的堆棧跟蹤嗎?我看到一個類似的線程here,但因爲我沒有execinfo.h我無法使用它。

回答

1

您可以使用gdb(命令r)運行該程序。哪裏崩潰,你會回到gdb,你可以看看堆棧跟蹤和變量。

你也可以看看this,或者搜索「gdb multithreaded」。

+0

這是否等同於在程序導致SIGSEGV後輸入'backtrace'命令?因爲我只是看到一些[模糊無益](http://pastebin.com/Bt3FGywD)的東西,當我這樣做。 – Pieter 2012-07-31 17:24:28

+0

是(簡稱'bt')。你看到的是由於堆棧損壞。你已經寫出了一些數組的邊界,破壞了函數堆棧幀,所以gdb無法恢復調用函數。你有沒有試過用'valgrind'運行它? – Shahbaz 2012-07-31 20:06:25

+0

現在有沒有Windows版本的'valgrind'?有什麼Windows替代品可以推薦? – Pieter 2012-08-01 07:08:40

相關問題