gdb调试c程序
博客简介
本篇博客记录如何用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