GDB - 获取当前线程调用堆栈上的总帧数
GDB - get total number of frames on the call stack of the current thread
当在断点处停止时,gdb 是否有一个命令来打印当前线程的调用堆栈上有多少帧?
目前,我bt
打印线程的整个回溯,然后手动计算帧数。我猜 gdb 有执行此操作的命令,但我找不到它。
您可以给 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
当在断点处停止时,gdb 是否有一个命令来打印当前线程的调用堆栈上有多少帧?
目前,我bt
打印线程的整个回溯,然后手动计算帧数。我猜 gdb 有执行此操作的命令,但我找不到它。
您可以给 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