編程工具系列之一------使用GDB的堆棧跟蹤功能

      在調試程序的過程當中,查看程序的函數調用堆棧是一項最基本的任務,幾乎全部的圖形調試器都支持這項特性。函數

      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函數。

相關文章
相關標籤/搜索