#gdb命令
(1)frame n: 查看第n楨的信息, frame可以用f縮寫
(2)frame addr: 查看pc地址爲addr的楨的相關信息
(3)up n: 查看當前楨上面第n楨的信息
(4)down n: 查看當前楨下面第n楨的信息
https://blog.csdn.net/wang_xya/article/details/46011019 這位大佬的命令更爲詳細
#include <stdio.h>
int sum(int n)
{
int ret = 0;
if( n > 0 )
{
ret = n + sum(n-1);
}
return ret;
}
int main()
{
int s = 0;
s = sum(10);
printf("sum = %d\n", s);
return 0;
}
我們編譯一下這個代碼 然後用gdb運行
開始運行
查看棧中 函數的 調用順序
查看寄存器的值
查看當前棧幀的詳細信息
上圖中顯示的信息有:
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
!](https://img-blog.csdnimg.cn/20200217171014708.png)
查看棧中的內容從棧頂開始