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
    gdb调试c程序