2011-07-14 118 views
0

我是Linux,Qt的新手,並且在C++中屬於初級;所以我遇到的問題很可能是我自己的錯......任何幫助都非常感謝。在Qt中重現錯誤:調試代碼時出現分段錯誤

我試圖在基本上任何項目中一步一步地遇到分段錯誤。例如,QtCreator中包含的表模型項目。在發佈或調試中,項目運行沒有任何問題。但是,如果我嘗試添加斷點(當然在調試)和單步調試代碼,我很快得到以下隨機錯誤:

The inferior stopped because it received a signal from the Operating System.

Signal name : SIGSEGV Signal meaning : Segmentation fault

QtCreator在這一點上顯示出一些小的彙編代碼:

 Dump of assembler code for function __nptl_death_event: 
0x00e80d00 <+0>:    push %ebp 
0x00e80d01 <+1>:    mov %esp,%ebp 
0x00e80d03 <+3>:    pop %ebp 
0x00e80d04 <+4>:    ret 
     End of assembler dump. 

我正在運行:

Qt Creator 2.1.0 Based on Qt 4.7.2 (32 bit) on Ubuntu 11.04 via VMWare on a Mac.

我不知道VMWare是否會成爲問題的潛在來源。我懷疑我在調試時也可能會做錯事,因爲我不瞭解外部/附加條款(我還沒有時間對此進行一些研究,在同一時間發現許多事情,有點壓倒性的...)

感謝您的幫助。

+0

如果你不使用wmware?如果你在運行ubuntu的PC上運行? –

+0

不幸的是,我手邊沒有任何PC可以試試這個... – Sam

+0

這是否在Windows上使用gdb?我遇到過與NetBeans類似的問題,並試圖調試Qt應用程序。我搬到了一個新的環境中,問題消失了。我認爲這是一個版本不兼容,但我沒有任何特別的罪魁禍首。 – Jay

回答

1

我相信這是您的GDB副本的問題 - 更具體地說,模塊或庫不匹配。 嘗試重新編譯GDB,以便您知道它將與您的本地glibc和pthreads庫一起工作。

作爲一個方面說明,該彙編代碼是一個空函數。它建立一個堆棧框架,再次將它撕下來並返回。它似乎使用的cdecl調用約定,這意味着它所編寫的庫是C(而不是C++)

+0

Josh,感謝您的幫助。 據我所知,我不認爲我在我的安裝過程中編譯了我自己的gdb版本。在進入這種重新編譯之前,有沒有一種簡單的方法可以確保問題似乎來自那裏?我有點害怕它,因爲它似乎有點超出了我的範圍/一個簡單的方法來打破我的設置......我希望我錯了:) – Sam

+0

你從11.04版本的軟件包中得到了軟件包嗎?你有它,然後升級到11.04,或者你從Qt的網站下載? – Josh

+0

您可能還想在GDB和libpthread上運行ldd並查看對象的依賴版本是否匹配 - 只是一個預感 – Josh

相關問題