gdb.webp
GNU调试器(英语:GNU Debugger,缩写:GDB),是GNU软件系统中的标准调试器,此外GDB也是个具有移携性的调试器,经过移携需求的调修与重新编译,如今许多的类UNIX操作系统上都可以使用GDB,而现有GDB所能支持调试的编程语言有C、C++、Pascal以及FORTRAN。

1. 编写一个C语言代码 a.c

int main()
{
    int i = 5;
    int b = 4;
    int ret = i * b;
    return ret ;
}

2. 以调试模式编译C语言源代码,输出 a.out

gcc -g a.c

3. 编译完成后,启动GDB调试工具,调试 a.out

gdb a.out

gdb.png

4. 如图,GDB调试基本命令 l b r n p i f q

  • 用l查看源码,b设置断点为main函数,也可以按行号设置断点行b x ;
  • r运行程序,n逐行运行程序,p显示变量值;
  • i命令是info的缩写, info locals 可以同时显示函数中多个变量的值。
  • f命令是frame的缩写,显示当前源码和函数信息,q命令是quit的缩写。

info.png

5. GDB中输入命令时可以使用 TAB 自动补全,帮你列出相关命令

  • 如图, 输入 i 按 TAB键,就显示 i 开头的命令
  • 输入 info 后按空格,再按 TAB键,就显示当前命令的 参数命令可供选择

6. GDB在学习ARM汇编也很好用,可以显示源码,汇编码,寄存器值

gdb-asm.png

  • layout asm 可以用来分窗口显示汇编码
  • disassemble 命令显示汇编码; info registers 显示寄存器值

    (gdb) layout
    List of layout subcommands:
    
    layout asm -- Apply the "asm" layout.
    layout next -- Apply the next TUI layout.
    layout prev -- Apply the previous TUI layout.
    layout regs -- Apply the TUI register layout.
    layout split -- Apply the "split" layout.
    layout src -- Apply the "src" layout.
    
    (gdb) disassemble
    Dump of assembler code for function main:
     0x2a0004e0 <+0>:    push    {r7}
     0x2a0004e2 <+2>:    sub    sp, #20
     0x2a0004e4 <+4>:    add    r7, sp, #0
     0x2a0004e6 <+6>:    movs    r3, #5
     0x2a0004e8 <+8>:    str    r3, [r7, #12]
     0x2a0004ea <+10>:    movs    r3, #4
     0x2a0004ec <+12>:    str    r3, [r7, #8]
    => 0x2a0004ee <+14>:    ldr    r3, [r7, #12]
     0x2a0004f0 <+16>:    ldr    r2, [r7, #8]
     0x2a0004f2 <+18>:    mul.w    r3, r2, r3
     0x2a0004f6 <+22>:    str    r3, [r7, #4]
     0x2a0004f8 <+24>:    ldr    r3, [r7, #4]
     0x2a0004fa <+26>:    mov    r0, r3
     0x2a0004fc <+28>:    adds    r7, #20
     0x2a0004fe <+30>:    mov    sp, r7
     0x2a000500 <+32>:    ldr.w    r7, [sp], #4
     0x2a000504 <+36>:    bx    lr
    End of assembler dump.
    
    (gdb) info registers
    r0             0x1                 1
    r1             0xbefff784          3204446084
    r2             0xbefff78c          3204446092
    r3             0x4                 4
    r4             0xbefff638          3204445752
    r5             0x0                 0
    r6             0x2a0003d1          704644049
    r7             0xbefff610          3204445712
    r8             0x0                 0
    r9             0x0                 0
    r10            0x2a011000          704712704
    r11            0x0                 0
    r12            0xbefff6a0          3204445856
    sp             0xbefff610          0xbefff610
    lr             0xb6ef0a21          -1225848287
    pc             0x2a0004ee          0x2a0004ee <main+14>
    cpsr           0xe0030             917552
    fpscr          0x0                 0

0 条评论

发表回复

Avatar placeholder

您的邮箱地址不会被公开。 必填项已用 * 标注