我寫了一個相似性加入程序,我試圖調試它。但是,當我輸入gdb -q ./simjoiner
時,輸出如下:這是GDB本身的段錯誤嗎?
從./simjoiner...讀取符號[1] 15939分段錯誤的gdb -q ./simjoiner
當使用gdb --args gdb ./simjoiner
,我可以得到下面的回溯:
#34324 0x00000000004f28c5 in ??()
#34325 0x000000000055efe9 in ??()
#34326 0x000000000055ebd9 in ??()
#34327 0x000000000055f0c4 in symbol_file_add()
#34328 0x000000000055f125 in ??()
#34329 0x000000000058472e in catch_command_errors_const()
#34330 0x00000000005870ed in ??()
#34331 0x00000000005845ca in catch_errors()
#34332 0x0000000000587454 in gdb_main()
#34333 0x000000000045375e in main()
所以我覺得這個段錯誤是由GDB本身,而不是我的程序引起的。我正在使用archlinux倉庫中的gdb 7.7。
我試圖在gcc 4.8.2和clang 3.4上編譯我的程序,兩者的結果都是一樣的。我也刪除了~/.gdbinit
,但沒有任何變化。但是,如果在啓用了-O2的情況下編譯,則沒有問題。如果我編譯我的程序的舊版本,它也可以很好地工作;但我還沒有想出哪些修改會導致此段錯誤。
你有什麼建議嗎?我做錯了什麼,或者這應該被視爲GDB錯誤?謝謝!
p.s.我的程序可在https://drive.google.com/file/d/0B9GlL8tebaU3eXdmVkN6WDR5Ykk/edit?usp=sharing;你可以輸入make clean; make gdb
在你的機器上測試它。
[Report bug](http://www.sourceware.org/gdb/bugs/)給GDB。 – timrau
如果您的程序運行時間足夠長,請嘗試在開始運行後附加GDB,這將明確哪個進程崩潰。 –
降級到gdb 7.6.1解決了這個問題;現在我確定它是一個錯誤。 – jiakai