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列出所在 watchpoints -
info threads列出所有线程 -
inifo registers列出寄存器的值 -
info set列出当前 gdb的所的设置 -
i frame -
i stack -
i locals -
i 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-number -
where显示当前行数和方法 -
backtrace简写bt显示当前的栈信息 -
bt full打印完整的栈信息 -
frame简写f显示当前栈的 frame 信息 -
f number选择frame -
up / down / up number /down number选择 frame
源码
-
list简写l列出源码 -
l num列出 num 行前后的源码 -
l fun列出方法 fun 的源码 -
l start_num, end_num -
l file_name:fun_name -
set listsize count设置一次显示多少行源码(默认为10) -
show listsize显示listsize -
directiory dir_name简写dir dir_name, 将指定的目录加入源码文件的前缀 -
show dir -
i line显示l所指的行(注意不是当前行)在obj中的起始地址 -
i line line_number同上 -
stepisi汇编级调试 -
nextini
变量
-
print var简写p var打印变量var -
p file_name:var -
p/x var以16进制打印整型变量 。 -
p/d var10进制 -
p/u varunsigned int -
p/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简写r -
continue简写c -
kill杀掉当前调试的程序 -
quit简写q退出gdb
实践
源码:
1 |
|
编译:
> g++ -g ./test.c -o test
调试:
1 | zr@zr:~/code/use_gdb/src1$ gdb ./test <----- 启动调试 |