下载安装
略
快速开始
- C 程序代码示例
main.c
#include <stdio.h>
int main() {
int sum = 0;
for (int i = 0; i < 10; i++) {
sum += i;
}
printf("sum=%d\n", sum);
return 0;
}
- gcc 编译
gcc -g main.c -o main
注意:若想要使用 gdb 命令进行调试,编译时须加上 -g 参数开启 debug 模式;正常环境不要开启。
- gdb 调试
gdb main
l
打印出源码
b 4
在第4行打上断点
run
程序运行到第一个断点处
n
下一步
p sum
打印出 sum 的值
set var sum=10
对 sum 重新赋值
c
运行到下一个断点,若没有则运行到结束
q
退出 gdb
gdb 命令简介
run可简写为r: 开始运行- 一般都是作为第一个命令执行
list可简写为l: 打印源码list+ 行号/函数名 :打印对应行或对应函数的源码
breakpoint可简写为bb+ 行号/函数名 : 在某行或函数上打上断点
info b: 查看断点信息delete可简写为dd+ 断点编号 : 删除断点(断点编号可使用info b查询)d breakpoints: 删除所有断点
clear行号:删除某行上的断点disable b:所有断点失效disable b+ 断点编号 :断点失效
enable b:所有断点生效enable b+ 断点编号 :断点生效
next可简写为n: 下一步step可简写为s: 下一步continue可简写为c: 执行到下一个断点处until+ 行号 : 跳转到指定行数print可简写为pp+ 变量名 :打印变量的值
display+ 变量名 : 跟踪某个变量的值,每一步调试结束都会打印变量值undisplay+ 变量名编号 : 取消跟踪set var+ 变量名=xxx : 修改变量的值call函数(参数) :调用函数finish: 执行到当前函数返回q: 退出 gdb 模式
参考资料
备注
在macOSx环境允许时遇到两个问题:
- Unable to find Mach task port for process-id 57186: (os/kern) failure (0x5).
- 权限不够,需要执行 sudo gdb main 开启 debug
- New Thread 0xd03 of process 1661 卡住
- 需要先杀掉进程 ps -ef | grep gdb , sudo kill -9 xxx
- 然后执行下述命令,参考自github
- touch ~/.gdbinit
- echo "set startup-with-shell off" >> ~/.gdbinit