bt指令可以打印出当前的调用堆栈, 在前面的操作中我们都有演示。 调用堆栈由连续的堆栈帧(stack frames)组成,每一帧(frame)对应一个函数调用,每一帧都包含了参数信息(args), 局部变量信息(locals), 寄存器信息(registers)和函数执行时的地址。 gdb使用一个数值来标识堆栈帧的层级,最后被调用到函数为0,往上值递增。
* print :打印变量或表达式的值。使用格式: print 变量或表达式 表达式中有两个符号有特殊含义:$和$$。 $表示给定序号的前一个序号,$$表示给定序号的前两个序号。 如果$和$$后面不带数字,则给定序号为当前序号。 * backtrace :打印指定个数的栈帧(stack frame)。使用格式: backtrace 栈帧个数 * frame :打...
PS:print可以简写为p、print是gdb的一个功能很强的命令,利用它可以显示被调试的语言中任何有效的表达式。表达式除了包含你程序中的变量外,还可以包含函数调用,复杂数据结构和历史等等。 用16进制显示(var)值 (gdb) print /x var PS:这里可以知道,print可以指定显示的格式,这里用'/x'表示16进制的格式。可以简写为...
Locals at 0x7fffffffdb98, Previous frame's sp is 0x7fffffffdbd0 Saved registers: rip at 0x7fffffffdbc8 (gdb) info frame 4 Stack frame at 0x7fffffffdcb0: rip = 0x40069f in print (sleep.c:35); saved rip = 0x4006c7 called by frame at 0x7fffffffdcc0, caller of frame at 0x...
2、frame、f n是一个从0开始的整数,是栈中的层编号。比如:frame 0,表示栈顶,frame 1,表示栈的第二层。 查看当前栈层的信息,你可以用以下GDB命令: frame 或 f 会打印出这些信息:栈的层编号,当前的函数名,函数参数值,函数所在文件及行号,函数执行到的语句。
*print:打印变量或表达式的值。使用格式: print 变量或表达式 表达式中有两个符号有特殊含义:$和$$。 $表示给定序号的前一个序号,$$表示给定序号的前两个序号。 如果$和$$后面不带数字,则给定序号为当前序号。 *backtrace:打印指定个数的栈帧(stack frame)。使用格式: ...
print_stack(frame) print os.waitpid(-1,os.WNOHANG) """ try : print os.waitpid( -1, os.WNOHANG ) except OSError : sys.stdout.write( 'Line[%u]: OSError\n' % sys.exc_info()[2].tb_lineno ) """ print"on_SIGCHLD]" def do_more(count): print'[do_more() begin %u]'%count ...
打印出当前函数的参数名及其值。Print the arguments of the selected frame, each on a separate line. info locals 打印出当前函数中所有局部变量及其值。 info catch 打印出当前的函数中的异常处理信息。 滚动gdb窗口 pageup/pagedown
Stack level 0, frame at 0xbffff5d4: eip = 0x804845d in func (tst.c:6); saved eip 0x8048524 called by frame at 0xbffff60c source language c. Arglist at 0xbffff5d4, args: n=250 Locals at 0xbffff5d4, Previous frame's sp is 0x0 ...
上述的命令其实都有更复杂的使用方法,可以通过help命令查看帮助,比如我们使用help p查看print命令的详细说明。 (gdb)help pPrintvalue of expressionEXP.Variablesaccessible are those of the lexical environment of the selected stack frame,plus all those whose scopeisglobal or an entire file.$NUMgets previous...