gdb堆栈跟踪
gdb 堆栈介绍
GDB将当前函数的栈帧编号为0,为外层函数的栈帧依次加1,这些编号将成为一些GDB命令的参数,以指明将要操作的是哪一个函数的栈帧。
GDB还支持使用Address作为栈帧的标识符,可在栈帧编号被破坏的情况下使用。
在栈帧之间切换
GDB中有很多针对调用堆栈的命令,都需要一个目标栈帧,例如打印局部变量值的命令。
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
相同,但是不打印信息。
打印栈帧信息
使用下面命令可以直接输出堆栈相关信息而不用移动栈帧。
frame
打印当前栈帧的简要信息。
info frame
打印当前栈帧的详细信息。
info frame args
打印指定栈帧的详细信息。
info args
打印函数参数信息。
info locals
打印当前可访问的局部变量的信息。
打印调用堆栈
backtrace
打印全部栈帧的简要信息,按 Ctrl+C 可终止打印。
backtrace n
打印最内层的 n 个栈帧的简要信息。
backtrace -n
打印最外层的 n 个栈帧的简要信息。
backtrace full
打印全部栈帧的详细信息。
backtrace full n
打印最内层的 n 个栈帧的详细信息。
backtrace full -n
打印最外层的n个栈帧的详细信息。