gdb 单步调试

Alexer 发布于 阅读:24 AI栈

gdb 单步调试就是让程序一行一行地跑,走到哪儿、变量变成什么样,当场就能看见,专门用来查逻辑跑偏、死循环、变量莫名被改这类问题。前提是编译时带上 -g,并且关掉优化,再用 gdb 载入程序、下好断点,然后交替使用 next 和 step,一行行往下走。

最短流程:加 -g -O0 重新编译 → gdb 载入 → b main 下断点 → run 跑起来 → n 逐行前进、s 进入函数、p 查看变量。

// demo.c:一个能看清调用过程的极简程序
#include <stdio.h>
int add(int a, int b) { return a + b; }
int main(void) {
    int x = 3, y = 4;
    int s = add(x, y);   // 单步走到这里可以进函数看参数
    printf("%d\n", s);
    return 0;
}
gcc -g -O0 demo.c -o demo   # 保留调试信息,关闭优化
gdb ./demo
(gdb) b main                # 在 main 处下断点
(gdb) run                   # 运行到断点停下
(gdb) n                     # 逐行执行,不进入函数
(gdb) s                     # 遇到 add 调用时钻进函数内部
(gdb) p a                   # 打印当前变量 a 的值
(gdb) bt                    # 看当前调用栈,确认走的是哪条路
(gdb) q                     # 退出

踩坑一:编译没加 -g,或者开了优化,单步会乱跳行,变量还可能提示找不到或已被优化掉,先老老实实重编一次再调试。踩坑二:n 和 s 混着用,s 一头钻进库函数出不来,进错了直接敲 finish 把当前函数跑完再返回。

逆向基础 调试工具 代码分析