【问题标题】:GDB - get total number of frames on the call stack of the current threadGDB - 获取当前线程的调用堆栈上的总帧数
【发布时间】:2021-01-08 00:08:20
【问题描述】:

在断点处停止时,gdb 是否有命令打印当前线程的调用堆栈上有多少帧?

目前,我使用bt 打印线程的整个回溯,然后手动计算帧数。我猜 gdb 有一个命令可以做到这一点,我只是找不到它。

【问题讨论】:

    标签: debugging gdb


    【解决方案1】:

    您可以给bt 一个参数-1 以仅显示最底部的帧(请参阅GDB: Backtraces),然后将帧号加1(因为帧是连续编号的,从0 开始):

    $ gdb fib2
    ...
    (gdb) bt
    #0  fib (n=4) at fib2.c:5
    #1  0x0000000008000714 in fib (n=5) at fib2.c:7
    #2  0x0000000008000714 in fib (n=6) at fib2.c:7
    #3  0x0000000008000714 in fib (n=7) at fib2.c:7
    #4  0x0000000008000714 in fib (n=8) at fib2.c:7
    #5  0x0000000008000714 in fib (n=9) at fib2.c:7
    #6  0x0000000008000757 in main () at fib2.c:15
    
    (gdb) bt -1
    #6  0x0000000008000757 in main () at fib2.c:15
    

    或者,如果您想要更多自定义输出,以下是使用 GDB 的 Python 扩展的方法(请参阅GDB: Frames In Python):

    $ cat framecount.py
    def framecount():
      f = gdb.newest_frame()
      count = 0
      while f:
        count += 1
        f = f.older()
      print(count, "frames")
    
    $ gdb fib2
    ...
    (gdb) source framecount.py
    (gdb) py framecount()
    7 frames
    

    【讨论】:

      猜你喜欢
      • 2014-10-13
      • 2014-04-26
      • 2015-11-07
      • 2010-09-22
      • 2017-07-22
      • 2012-04-06
      • 1970-01-01
      • 2021-12-15
      • 1970-01-01
      相关资源
      最近更新 更多