在調試程序的過程當中,查看程序的函數調用堆棧是一項最基本的任務,幾乎全部的圖形調試器都支持這項特性。函數
GDB調試器固然也支持這一特性,可是功能更加靈活和豐富。調試
GDB將當前函數的棧幀編號爲0,爲外層函數的棧幀依次加1,這些編號將成爲一些GDB命令的參數,以指明將要操做的是哪個函數的棧幀。ast
GDB還支持使用Address做爲棧幀的標識符,可在棧幀編號被破壞的狀況下使用。變量
1.在棧幀之間切換配置
GDB中有不少針對調用堆棧的命令,都須要一個目標棧幀,例如打印局部變量值的命令。select
frame args 將當前棧幀設置爲args(編號或Address)指定的棧幀,並打印該棧幀的簡要信息。程序
select-frame args 與frame args相同,可是不打印棧幀信息。移動
up n 向上回退n個棧幀(更外層),n默認爲1. 參數
down n 向下前進n個棧幀(更內層),n默認爲1.
up-silently n 與up n相同,可是不打印信息。
down-silently n 與down n相同,可是不打印信息。
2.打印棧幀信息(不移動棧幀)
frame 打印當前棧幀的簡要信息。
info frame 打印當前棧幀的詳細信息。
info frame args 打印指定棧幀的詳細信息。
info args 打印函數參數信息。
info locals 打印當前可訪問的局部變量的信息。
3.打印調用堆棧
backtrace 打印所有棧幀的簡要信息,按Ctrl-c可終止打印。
backtrace n 打印最內層的n個棧幀的簡要信息。
backtrace -n 打印最外層的n個棧幀的簡要信息。
backtrace full 打印所有棧幀的詳細信息。
backtrace full n 打印最內層的n個棧幀的詳細信息。
backtrace full -n 打印最外層的n個棧幀的詳細信息。
4.一些配置項
set backtrace past-main on 對調用堆棧的打印可越過main函數。
set backtrace past-main off 對調用堆棧的打印止步於main函數。