gdb调试常用命令

it2022-05-05  111

这篇完全是给记性不好的我,属于个人备忘录。 gdb可是调试c/c++的利器,我经常使用的命令如下:

使用gdb

$ gdb 程序名称 $ gdb --args 程序名称 程序参数 //带参数启动 $ gdb -x /home/local/gdbinit --args 程序名称 程序参数 //带自定义gdbinit脚本启动

参数传递

set args 参数

注意不能是set args “参数” 。如果多个参数传递,添加了“ ”。会不被程序识别。或者启动直接添加参数 gdb --args 程序名称 程序参数

调试子进程

set follow-fork-mode child

断点设置

b test.cpp:12 //断在test文件的第12行 b *address //在某个地址处停下 b filename:line_num if (var == ??) //带条件的断点 i b //查看断点 d 1 // 删除断点,1为断点号

运行

r(run)

单行调试

单步 s (step 碰到函数会进入) 单行 n (next 碰到函数不会进行, 而是整条执行) 单步 si (单步执行汇编指令)

查看汇编指令

disassemble x/10i $pc //从当前pc位置查看接下来的10条指令

查看寄存器信息

info registers i r t0 at //仅仅查看t0和at两个寄存器中的值

查看变量值

p 变量名称

观察某个变量/内存地址的状态(也可以是表达式)

watchpoint只能在程序启动后设置,先在main那下个断点,让程序启动后暂停在main函数处: (gdb) watch 变量名称 (gdb)c

调试多进程

(gdb) set follow-fork-mode child (gdb) set detach-on-fork off

忽略某个信号

(gdb)handle SIG34 nostop noprint //忽略信号SIG34 也可以把此命令写入自己定义的gdbinit文件中,然后启动gdb时使用-x加载此gdbinit文件: gdb -x /home/loongson/gdbinit --args 程序名称 参数列表

如何让程序能够使用gdb

使用gdb之前必须确保程序在gcc命令编译时添加 -g -rdynamic 选项。 当前很多应用编译是使用写好的Makefile。我们只要执行make命令就可以生成最终bin程序。那这个“-g -rdynamic”参数怎么添加进去呢?快速的方式是执行make时添加–trace参数。即make --trace 这样会把make过程的命令详细打印出来。然后找到gcc命令行,添加上“-g -rdynamic”参数后单独执行这条gcc语句,也可以生成bin程序。


最新回复(0)