2010-06-28 141 views
0

我們有一個生成核心轉儲的二進制文件。所以我運行了gdb命令來分析問題。請注意,二進制和代碼位於兩個不同的位置,我們不能使用調試符號來構建整個二進制文件。因此,如何和我可以從下面backtarce查找細節:分析核心轉儲

gdb的二進制核心文件

(gdb) where 
#0 0x101fa37a in f1() 
#1 0x10203812 in operator f2<() 
#2 0x085f6244 in f3() 
#3 0x085f1574 in f4() 
#4 0x0805b27b in sigsegv_handler() 
#5 <signal handler called> 
#6 0x1018d945 in f5() 
#7 0x1018e021 in f6() 
.................................. 
#29 0x08055c5c in main() 
(gdb) 

請給我用gdb,我可以發出尋找什麼每個堆棧幀裏面數據的命令,有什麼問題可能是,在哪裏失敗,其他調試方法,如果有的話?

+1

開始gdb'知道你能「的問題」 ...... – ShinTakezou 2010-06-28 17:14:20

+0

你運行在Linux發行版的二進制命令?如果這樣'valgrind'可能會給你一些不容易通過gdb分析的附加信息。 – Void 2010-06-28 17:52:02

+0

我嘗試了很多gdb命令,但徒勞無功。我們沒有在我們的盒子中部署valgrind命令 我可以調試有關代碼的問題的gdbs命令是什麼? – Prakash 2010-06-28 18:28:44

回答

0

您可以在gdb中使用幫助。瀏覽堆棧:幫助棧

導航堆棧的主要有用命令是上下。如果您手邊有調試符號,則可以使用列表查看您的位置。然後要獲取信息,您需要打印(縮寫爲'p')。例如,如果您有一個名爲myInt的int,那麼您只需鍵入p myInt。沒有調試信息會更困難。從你的棧幀看來,問題出現在f5()中。你可以做的一件事是在gdb中啓動你的程序。它會在段錯誤發生的地方停下來。當你有關於段錯誤的部分代碼的提示時,可以使用調試選項來編譯該代碼單元。

基本知識。告訴我們更多你是否需要更多幫助。

MY2C從'信息