GDB 常用命令

断点

  1. (gdb) break test.c:8 // 设置行号断点
  2. (gdb) break func_name // 设置函数断点
  3. (gdb) break *0x40106e // 设置汇编16进制行号断点
  4. (gdb) info b // 查看断点
  5. (gdb) ignore 2 5 // 跳过断点 第一个参数表示断点编号,第二个表示跳过次数。

调试

  1. n
    执行一行源程序代码,此行代码中的函数调用也一并执行。相当于其它调试器中的“Step Over (单步跟踪)”。
    这个命令必须在有源代码调试信息的情况下才可以使用(GCC编译时使用“-g”参数)。
  1. (gdb) n
  1. si
    si命令类似于s命令,但针对汇编指令。
  1. (gdb) si
  1. ni
    ni命令类似于n命令,但针对汇编指令。
  1. (gdb) ni

观察点

查看内存


  1. (gdb) x/s 0x4005a0 // 以字符串的形式查看 参数可以是地址或者变量名
  2. 0x4005a0: "hello world"
  3. (gdb) x/t s // 以字符的形式查看
  4. 0x4005a0: 01101000
  5. (gdb) x/t s // 以二进制查看
  6. 0x4005a0: 01101000
  7. (gdb) x/x s // 以十六进制查看
  8. 0x4005a0: 0x68
  9. (gdb) x/d s // 以十进制查看
  10. 0x4005a0: 104
  11. (gdb) x/s $rbx // 查看寄存器指向内存的值(注意要加'$')
  12. 0x604900 <input_strings+320>: "flyers"
  13. (gdb) x/x 4*$rcx+0x402460 // 可以找到运算后的地址指向的值
  14. 0x402478 <array.3159+24>: 0x09

寄存器

  1. // 查看全部寄存器
  2. (gdb) info registers
  3. rax 0x4004f0 4195568
  4. rbx 0x0 0
  5. rcx 0x400510 4195600
  6. rdx 0x7fffffffe598 140737488348568
  7. rsi 0x7fffffffe588 140737488348552
  8. rdi 0x1 1
  9. rbp 0x7fffffffe4a0 0x7fffffffe4a0
  10. rsp 0x7fffffffe4a0 0x7fffffffe4a0
  11. r8 0x7ffff7dd6e80 140737351872128
  12. r9 0x0 0
  13. r10 0x7fffffffe2f0 140737488347888
  14. r11 0x7ffff7a3ca40 140737348094528
  15. r12 0x400400 4195328
  16. r13 0x7fffffffe580 140737488348544
  17. r14 0x0 0
  18. r15 0x0 0
  19. rip 0x400503 0x400503 <main+19>
  20. eflags 0x246 [ PF ZF IF ]
  21. cs 0x33 51
  22. ss 0x2b 43
  23. ds 0x0 0
  24. es 0x0 0
  25. fs 0x0 0
  26. gs 0x0 0
  27. // 查看指定寄存器
  28. (gdb) info register rax
  29. rax 0x4004f0 4195568

查看汇编代码

  1. (gdb) disassemble main
  2. Dump of assembler code for function main:
  3. 0x00000000004004f0 <+0>: push %rbp
  4. 0x00000000004004f1 <+1>: mov %rsp,%rbp
  5. 0x00000000004004f4 <+4>: mov %edi,-0x14(%rbp)
  6. 0x00000000004004f7 <+7>: mov %rsi,-0x20(%rbp)
  7. 0x00000000004004fb <+11>: movq $0x4005a0,-0x8(%rbp)
  8. => 0x0000000000400503 <+19>: pop %rbp
  9. 0x0000000000400504 <+20>: retq
  10. End of assembler dump.