博客简介
本篇博客记录如何用gdb调试c程序,以免和之前的命令混淆,这里做一个统一的说明。
- 编译并运行.s文件
- .c文件的编译过程
- gdb调试c程序
编译并运行.s文件
-
ctr+alt+T打开Terminal
-
cd +目录进入相应目录
-
编译.s文件:
as -g fileName.s -o fileName2.o如:as -g 1005.s -o 1005.o -
建立连接:
ld fileName.o -o fileName如:ld 1005.o -o 1005 -
查看文件:
objdump -d fileName.o如:objdump -d 1005.o -
开启调试:
gdb -q fileName,如:gdb -q 1005 -
设断点:
b *_start+1 -
运行:r
-
查看寄存器:
info reg -
执行下一条语句:
next
.c文件的编译过程
- 编译过程:预处理(Pre-Processing)–>编译(Compiling)–>汇编(Assembling)–>链接(Linking)
- 预处理指令:
gcc -E hello.c -o hello.i - 编译处理指令:
gcc -S hello.i -o hello.s - 汇编处理指令:
gcc -c hello.s -o hello.o - 链接处理指令:
gcc hello.o -o hello - 直接编译指令:
gcc -o hello hello.c - 将.c文件编译成.s文件:
gcc -S hello.c -o hello.s - 运行可执行文件指令:
./hello
gdb调试.c文件
在上面的指令中直接编译.c文件,我们无法调试.c文件,调试时会一闪而过异步执行完全,所以想要可以和.s文件一样一步步执行调试过程,我们需要用这些指令
- 生成可执行可调试文件,
gcc -g test.c -o test - 调试:
gdb -q test - 单步.c语句:
n - 单步.s汇编语句:
ni