1 gdb帮助命令
(gdb)help:查看命令帮助,具体命令查询在gdb中输入help + 命令,简写h(gdb)run:重新开始运行文件(run-text:加载文本文件,run-bin:加载二进制文件),简写r(gdb)start:单步执行,运行程序,停在第一执行语句(gdb)list:查看原代码(list-n,从第n行开始查看代码。list+ 函数名:查看具体函数),简写l(gdb)set:设置变量的值(gdb)next:单步调试(逐过程,函数直接执行),简写n(gdb)step:单步调试(逐语句:跳入自定义函数内部执行),简写s(gdb)backtrace:查看函数的调用的栈帧和层级关系,简写bt(gdb)frame:切换函数的栈帧,简写f(gdb)info:查看函数内部局部变量的数值,简写i(nfo registers 可以显示寄存器,简写info reg)(gdb)finish:结束当前函数,返回到函数调用点(gdb)continue:继续运行,简写c(gdb)print:打印值及地址,简写p(gdb)quit:退出gdb,简写q(gdb)break+num:在第num行设置断点,简写b(gdb)info breakpoints:查看当前设置的所有断点(gdb)delete breakpoints num:删除第num个断点,简写d(gdb)display:追踪查看具体变量值(gdb)undisplay:取消追踪观察变量(gdb)watch:被设置观察点的变量发生修改时,打印显示(gdb)i watch:显示观察点(gdb)enable breakpoints:启用断点(gdb)disable breakpoints:禁用断点(gdb)x:查看内存x/20xw 显示20个单元,16进制,4字节每单元(gdb)run argv[1] argv[2]:调试时命令行传参
2 设置断点的各种方法
断点可以通过函数名、当前文件内的行号来设置,也可以先指定文件名在指定行号,还可以指定与暂停位置的偏移量,或者地址来设置。
#格式说明:
break 函数名break 行号break 文件名:行号break 文件名:函数名break +偏移量break -偏移量break *地址
例:
在函数处加断点(gdb)b iseq_compile在文件名和行号处加断点(gdb)b compile.c:516设置偏移量(gdb)b +3在某地址处加断点(gdb)b *0x88116fd6如果不指定位置,就是在下一行代码上设置断点(gdb)b设置好的断点可以通过 info break 查看
3 生成核心转存储文件
使用generate-core-file可将调试中的进程生成核心转存储文件功能,将正在调试的文件生成核心转存储文件
有了内核转存储文件和调试对象,以后就能查看生成转存储文件时的运行历史(寄存器值,内存值等)。
