GDB
GDB调试器:
1. 开始并设置参数
2. 打断点,在特殊情况下停止
3. 当程序停止时,检查发生了什么
4. 纠错
支持多种语言:C/C++/Go/Rust/Assembly汇编语言

安装:
基于 Debian 的系统中:sudo apt-get install gdb
基于 Red Hat 的系统中:sudo yum install gdb


gcc -g test.c // gcc编译时需要带上-g,才能gdb调试
gdb ./a.out // 开始调试编译后的可执行文件
man gdb // 查看使用手册

gdb --version


gdb中的调试命令:
1. run或r // 执行程序.run [arglist],arglist是你要给程序传递的命令行参数
2. quit或q // 推出
3. break或b // 对函数或某一行打断点,例如 break main,对main函数打断点;b 10,对第10行打断点
4. list或l // 查看源代码,如果查看不全,可以继续list
5. info b或info breakpoints // 查看当前已有的断点信息
6. next或n // 执行程序的下一行。如果此行调用了其他函数,则将该函数视为一个单独的整体
7. print或p // 打印变量的值或地址,例如p arr[0]打印数组第一个元素的值,p &arr[0]打印数组第一个元素的地址
8. delete或d // 删除断点
9. continue或c // 从当前位置开始连续运行程序,直到碰到下一个断点或程序结束
10. step或s // 执行程序的下一行。如果此行包含对其他函数的调用,则会进入该函数内部
11. backtrace或bt // 查看函数调用堆栈
12. gdb [program] // 用 GDB 调试程序

gdb中支持shell关键词进行linux命令操作,例如shell ls, shell cat test1.c

日志功能,在gdb中:set logging on,从而开启日志功能,当前路径会生成一个gdb.txt的日志文件

watchpoint和catchpoint
watch *0x7ffffffe52c // 对地址添加观察点
info watchpoints // 查看当前的观察点信息
在后续程序执行过程中,当观察的地址的值发生变化时,会自动打印出变化前后的值

查看core文件: gdb 二进制文件 core文件,例如gdb ./a.out core.19761

调整正在运行的程序
./a.out & // 让可执行文件后台执行,会返回进程pid
gdb -p 21528 // 调试运行中的进程

 

gdb排查coredump

1. 输入bt(backtrace的缩写)命令。这将显示一个函数调用栈,你可以看到程序崩溃时正在执行哪个函数。

2. 可以使用info registers命令来查看寄存器的状态,或者list命令来查看程序崩溃附近的代码

3. print命令可以查看指定变量的值,例如 print variable_name