GDB debug 的常用指令

作者 QIFAN 日期 2017-04-11
C
GDB debug 的常用指令

gdb --args [参数] 带参数运行 gdb

b [方法名/行号] 设置断点
w [变量名] 变量值改变时暂停程序

run 运行程序

bt 显示当前程序运行的栈结构,这个在程序遇到 bug 停止时特别有用。下图是 segment fault 时的程序栈,# 代表了所处的 frame 。

(gdb) bt
#0 0x0000000000405f7e in mm_checkheap (lineno=0) at mm.c:611
#1 0x00000000004033b5 in eval_mm_valid (trace=0x61d4c0, ranges=0x61d480) at mdriver.c:1048
#2 0x0000000000401670 in run_tests (num_tracefiles=1, tracedir=0x60b3c0 <tracedir> "./", tracefiles=0x61d010,
mm_stats=0x61d050, speed_params=0x7fffffffe0a0) at mdriver.c:285
#3 0x0000000000401e51 in main (argc=6, argv=0x7fffffffe268) at mdriver.c:508

frame [#] 进入指定 frame ,此时就可以随意调用本地变量,可以使用 print 指令打出值。

list 显示当前执行及其上下的源码。

shell make 在 c 文件修改后直接在 gdb 内编译,并用原参数执行。

n 执行文件中的下一行 c 代码,不进入方法
ni 执行程序的下一行 c 代码,进入方法