GDB 常用命令一览
命令
GDB 是 Linux 下的命令行调试工具。
启动 GDB 有如下几种方式:
gdb <program>直接启动执行程序gdb <program> core用gdb 同时调试一个可执行程序和core文件。core 是程序非法执行后 core dump 产生的文件gdb <program> <PID>指定进程, gdb会自动 attach 上去。program 应该在 PATH 环境变量中可以搜索得到。
常用的 gdb 命令如下
信息 info
info 可以简写成 i
info args列出参数info breakpointsinfo breaki b列出所有断点info break numberi b number列出序号为 number 的的断点info watchpointsi watchpoints列出所在 watchpointsinfo threads列出所有线程inifo registers列出寄存器的值info set列出当前 gdb的所的设置i framei stacki localsi catch
断点和监视 break & watch
break 可以简写为 `b`
break fun_nameb fun_name在 fun_name 处打断点b line_number在 line_number 处打断点b +offset在offset 行后加断点b -offset同上b file_name:fun_name文件的方法名处打断点b fine_name:line_number同上b *address在某地址处打断点。适用于没有源码的情况b line_number if condition条件断点。当条件为 true 时会中断tbreaktb单次命中断点。如tb 12表示只会在第12行命中一次。
watch 可以添加监视。watch 没有简写watch var监视var变量watch condition带条件的监视。如watch a>1
删除和禁用断点
clear清除当前行的断点clear fun_name清除 fun_name 中的所有断点clear line_number删除该行的断点delete简写d. 删除所有的 breakpoints, watchpoints, or catchpoints.d num删除序号为 num 的断点d num1-num2删除序号从 num1 到 num2 的所有断点disable/enable num禁用/启用序号为 num 的断点disable/enable num1-num2禁用/启用 序号从 num1到 num2 的断点
调试
run简写r运行程序step简写s单步,可以进入方法(相当于 VS 的 F11)finish跳出当前方法(相当于VS 的 sh+F11)next简写n单步,不会进入方法(相当于 VS 的 F10)until line-number运行到 line-number 行。line-number 只能比当前行数大。 until 还可以接 function name, address, filename:function or filename:line-numberwhere显示当前行数和方法backtrace简写bt显示当前的栈信息bt full打印完整的栈信息frame简写f显示当前栈的 frame 信息f number选择frameup / down / up number /down number选择 frame
源码
list简写l列出源码l num列出 num 行前后的源码l fun列出方法 fun 的源码l start_num, end_numl file_name:fun_nameset listsize count设置一次显示多少行源码(默认为10)show listsize显示listsizedirectiory dir_name简写dir dir_name, 将指定的目录加入源码文件的前缀show diri line显示l所指的行(注意不是当前行)在obj中的起始地址i line line_number同上stepisi汇编级调试nextini
变量
print var简写p var打印变量varp file_name:varp/x var以16进制打印整型变量 。p/d var10进制p/u varunsigned intp/o var8进制p/t var2进制 (1byte/8bits)p/c var以字符形式p/f var以 floating 形式p/a var以十六进制地址x/4b &var以 4 byte 打印var 的内存ptype var显示var 的类型ptype date-type显示原类型
启动
run简写rcontinue简写ckill杀掉当前调试的程序quit简写q退出gdb
实践
源码:
1 |
|
编译:
> g++ -g ./test.c -o test
调试:
1 | zr@zr:~/code/use_gdb/src1$ gdb ./test <----- 启动调试 |