GCC调试工具GDB的常用指令

447 阅读4分钟

「这是我参与11月更文挑战的第19天,活动详情查看:2021最后一次更文挑战」。

常用指令

  1. 进入调试模式

    gdb 可执行文件  
    
  2. 如果忘了指定调试文件可以使用file指令指定

    (gdb) file 文件名
    
  3. 使用quit指令退出调试模式 可简写为q

    (gdb) q
    
  4. 使用start指令开始调试 停在第一行代码处

    (gdb) start
    
  5. 使用step指令进行单步执行 可简写为s

    (gdb) s   #会进入函数内部
    
  6. 使用next执行进行单步执行 可简写为n

    (gdb) n  #不会进入函数内部
    
  7. 汇编级别单步执行(上面ns为c语言级别单步指令)

    (gdb) ni #不进入函数内部
    (gdb) si #会进入函数内部
    
  8. 使用list指令列出所有源代码 可简写为l

    (gdb) l
    
  9. 使用break指令设置断点位置 可简写为b

    (gdb) b main #在main函数处打断点
    (gdb) b 10 #在第十行位置打断点
    (gdb) b test:10 #在test文件的第十行位置打断点 
    (gdb) b 0x3400a #在0x3400a内存位置打断点
    (gdb) b 10 if i==3 #设置条件断点 i等于3时在第十行位置打断点 适用于循环
    
  10. 使用delete+断点编号指令删除断点 可简写为d

(gdb) delete 3 #删除编号为3的断点  清除时GDB不会给出任何提示
  1. 使用 clear+断点行号指令清除断点
(gdb) clear 3 #清除第三行的断点  清除时GDB会给出提示
  1. 使用 disable/enable + 断点编号 指令冻结或启动断点

    disable 3,4 #冻结编号为3和4的断点 多个断点使用逗号分隔
    
  2. 使用info break指令查看断点的情况

    (gdb) info break
    
  3. 使用 tbreak 指令设置临时断点

    (gdb) tbreak 行号/函数名 #设置临时断点,到达后被自动删除
    
  4. 使用 awatch/watch + 变量 设置变量读写观察点

    (gdb) awatch/watch a #当变量a被读出或写入时程序被暂停 
    (gdb) rwatch a #当变量a被读出时程序被暂停 
    
  5. 使用continue指令运行到断点处 可简写为c

    (gdb) c
    
  6. 使用print指令打印变量的值 可简写为p

    (gdb) p a #打印变量a的值
    
  7. 使用x指令打印指定内存地址数据

    (gdb) x /6cb 0x804835c #打印地址0x804835c起始的内存内容,连续6个字节,以字符格式输出。
    
  8. 使用run指令运行整个程序 可简写为r

    (gdb) r  #如果此前没有下过断点,则执行完整个程序;如果有断点,则程序暂停在第一个可用断点处
    
  9. 使用 call 指令直接运行某个函数

    (gdb) call fun #在当前位置执行函数fun
    
  10. 使用display 指令设置需要跟踪的变量

    (gdb) display a #跟踪变量a 每次断点到该处就显示该变量的值
    
  11. 使用 info display 显示当前所有跟踪的情况

    (gdb) info display
    
  12. 使用undisplay+编号 指令取消对变量的跟踪

    (gdb) undisplay 3 #取消对编号为3的跟踪事件
    
  13. 使用 set+ 变量 指令改变变量的值

    (gdb) set i=3 #临时设置变量i的值为3
    
  14. 使用 set 指令设置运行时参数

    (gdb) set i=3 #临时这只变量i的值为3
    
  15. 使用 show 指令查看运行时参数

    (gdb) show i
    
  16. 使用 finish 指令函数结束

    (gdb) finish
    
  17. 使用help指令查看指令使用说明

    (gdb) help print #查看print指令的解释说明
    (gdb) help #查看所有指令
    
  18. 使用info reg指令查看寄存器状态

    (gdb)  info reg
    
  19. 使用 info stack指令查看堆栈状态

    (gdb) info stack
    
  20. 运行shell指令

    (gdb) shell ls   #运行shell指令ls。
    
  21. 其他指令

    (gdb)  path #可设定程序的运行路径。 
    (gdb)  show paths #查看程序的运行路径。
    
    
    (gdb)  cd    #相当于shell的cd命令。 
    
    (gdb)  pwd  #显示当前的所在目录
    
  22. 使用回车重复上一条指令