gdb檢視函式呼叫棧
這裡還有一點需要說明,不知道細心的讀者朋友有沒有發現,foo那一楨沒有PC的地址,GDB通過這樣來標示該楨是當前正在執行到的楨,因此我們通過看呼叫棧的資訊,便可得知程式執行到哪裡了。
讀者朋友有沒有覺得原來函式呼叫的過程還有這麼多資訊可以知道啊,下面我就開始介紹一些GDB命令,通過這些命令你便可以檢視到上面介紹的這些資訊,甚至更加詳細的資訊。
1. 檢視呼叫棧資訊:(具體資訊的內容,與上面第二部分中介紹的相同)
2. 檢視楨資訊:
(1)frame n: 檢視第n楨的資訊, frame可以用f縮寫(2)frame addr: 檢視pc地址為addr的楨的相關資訊(3)up n: 檢視當前楨上面第n楨的資訊(4)down n: 檢視當前楨下面第n楨的資訊3. 檢視更加詳細的資訊:
(1)info frame、info frame n或者info frame addr檢視指定楨的詳細資訊,關於詳細資訊的內容,這裡有必要做一個介紹,如下圖所示:
上圖中顯示的資訊有:
a. 當前楨的地址: 0xbffff400
b. 當前楨PC: eip = 0x8048516
c. 當前楨函式: bar (test.cpp:16)
d. caller楨的PC: saved eip 0x8048535
e. caller楨的地址: called by frame at 0xbffff420
f. callee楨的地址: caller of frame at 0xbffff3e0
g. 原始碼所用的程式的語言(c/c++): source language c++
h. 當前楨的引數的地址及值: Arglist at 0xbffff3f8, args: name=0x8048621 “jessie”, myname=0x804861c “jack”
i. 當前相中區域性變數的地址:Locals at 0xbffff3f8, Previous frame’s sp is 0xbffff400
k. 當前楨中儲存的暫存器: Saved registers: ebp at 0xbffff3f8, eip at 0xbffff3fc