debug 版本: 可调式版本
release 版本: 发行版本 gcc 默认生成 release 版本
gcc -o main main.c -g
gcc -c main.c -g ---> debug 版本的中间文件
gcc -o main main.o ---> debug 版本的可执行文件
调试的目标: 可执行文件
调试的手段: 通过源文件来控制程序的执行
l | 显示 main 函数所在的文件的源代码 |
list filename | num 显示 filename 文件的源代码 |
b linenum | 给linenum行添加一个断点 |
b funname | 给funname这个函数的第一行添加一个断点 |
info b | 显示断点信息 |
d bpnum | 删除断点 |
r | 运行程序 |
n | 执行到下一行 |
c | 运行到下一个断点处 |
s | 进去将要被调用的函数中单步执行 |
finish | 退出函数 |
q | 退出调试 |
p valname | 显示valname的值 |
p &valname | 显示valname的地址 |
p arr | 显示数组中所有元素的值 |
p ptr | 显示指针中保存的地址 |
p *ptr | 显示指针指向空间中存储的值 |
p *parr@len | 通过指向数组的指针显示数组所有的元素 |
p node.age | 查看结构体变量成员的值 |
p nade | 显示结构体中所有成员的值 |
display | 以展台的形式显示变量的值 |
info threads | 显示当前可调试的所有线程 |
thread ID | 切换当前调试的线程为指定ID的线程 |
attach process-id | 开始调试一个正在运行的进程 |
gdb attach | 调试运行的进程 |
gdb attach <进程号> | 调试运行的进程 |
until | 运行至当前语句块结束 |
step | 逐语句步进,会进入子函数 |
next | 逐过程步进,不会进入子函数 |
continue | 继续运行程序直到下一个断点 |
until 行号 | 可用于跳出循环,加快了调试速度。 |
set follow-fork-mode parent | 跟踪父进程, 默认 |
set follow-fork-mode child | 跟踪子进程 |