gdb

169 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第30天,点击查看活动详情

调试程序是开发过程中必不可少的一环,在 Windows 或 MacOS 上开发时,可以使用 VS 和 CLion 等 IDE 上自带的调试功能来打断点或查看变量和堆栈,但 Linux 并没有图形化的操作界面,而如果只通过打 log 的方式来查找问题的话效率将会非常低下,此时我们可以利用 GDB 来提升我们的开发效率。

GDB 是 GNU Debugger 的简写,是 GNU 软件系统中的标准调试器。GDB 具备各种调试功能,包括但不限于打断点、单步执行、打印变量、查看寄存器、查看函数调用堆栈等,能够有效地针对函数的运行进行追踪和警告;使用 GDB 调试时,可以监督和修改程序的变量,并且这些修改是独立于主程序之外的。GDB 主要用于调试编译型语言,对 C,C++,Go,Fortran 等语言有内置的支持,但它不支持解释型语言。

一.GDB命令

启动

gdb可执行程序

退出

q/quit

给程序设置参数/获取设置参数

set args 10 20
show args

gdb使用帮助

help

查看当前文件代码

 list/l (从默认位置显示)
 list/l  (从指定的行显示)
 list/l  (从指定的函数显示)
 

查看非当前文件代码

 list/l  文件名:行号
 list/l  文件名:函数名

设置显示的行数

  show list/listsize
  set list/listsize  行数
 
 

设置断点

 b/break   行号
 b/break   函数名
 b/break   文件名:行号
 b/break   文件名:函数
 

查看断点

 i/info b/break

删除断点

 d/del/delete 断点编号
 

设置断点无效

 dis/disable  断点编号
 

设置断点生效

 ena/enable   断点编号
 

设置条件断点(一般用在循环的位置)

 b/break 10 if i==5
 

运行GDB程序

 start(程序停在第一行)
 run(遇到断点才停)

继续运行,到下一个断点停

 c/continue
 

向下执行一行代码(不会进入函数体)

 n/next
 

变量操作

 p/print 变量名(打印变量值)
 ptype 变量名(打印变量类型)
 

向下单步调试(遇到函数进入函数体)

 s/step
 finish(跳出函数体)
 

自动变量操作

  display  变量名(自动打印指定变量)
  i/info display
  undisplay  编号

其他操作

  set var 变量名=变量值(循环中用的比较多)
  until (跳出循环)