2011-05-19 75 views
3

我遇到了一個奇怪的GDB行爲。當運行一個核心的事後分析,從C++中的大量多線程應用程序傾倒,調試器命令GDB在事後分析中顯示錯誤的線程

bt 
where 
thread info 

從來沒有告訴我,該程序實際上崩潰的線程。它一直向我展示線程號1.由於我習慣從其他系統看到這個工作,所以我很好奇它是否是GDB中的一個Bug,或者它們是否以某種方式改變了行爲。任何人都可以指出我的解決方案,它是PITA來搜索75個線程,只是爲了找出調試器已經知道的東西。

順便說一句,我在Debian Squeeze(6.0.1)上,GDB的版本是7.0.1-debian,系統是x86並且完全是32位。在我以前的Debian(5.x)安裝中,調試一個由完全相同源代碼轉儲的內核,爲我提供了正確線程的回溯,就像Ubuntu 10.04安裝中的GDB一樣。

謝謝!

+3

當GDB初始化並讀取核心文件時,它不給出終止摘要?通常包含活動線程摘要。 – wallyk 2011-05-19 17:28:47

+0

今天啓動後,我重新編譯了源代碼並讓它再次崩潰。 GDB現在像一個魅力。現在我更加困惑......但無論如何感謝幫助。 – user761451 2011-05-20 08:47:18

回答

3

GDB不知道哪個線程導致了崩潰,只是簡單地顯示了它在core中看到的第一個線程。

Linux內核通常首先轉儲故障線程,這就是爲什麼在大多數系統中,只要將core加載到GDB中,就會以完全正確的線程結束。

我從來沒有見過內核被破壞,但我從未使用過Debian 6。

我的猜測是,這會被破壞,然後得到修復,Debian 6隨附一個破損的內核。

您可以嘗試升級Debian 6機器上的內核以匹配例如你的Ubuntu 10.04,並看看問題是否消失。

另外,谷歌用戶空間coredumper是否正確。你可以鏈接它,並從SIGSEGV處理程序調用它。

+0

它再次工作。仍然不明白是什麼搞砸了。無論如何,你的回答是啓發性的,谷歌用戶空間Coredumper似乎值得仔細看看。謝謝。 – user761451 2011-05-20 08:53:05