GDB调试器

发布于:2023-01-20 ⋅ 阅读:(345) ⋅ 点赞:(0)

何为GDB?!

GDB调试你的代码(设置断点,单步执行等)

使用:

首先要调试c/c++程序,首先在编译器时.我们首先要把调试信息加到可执行文件中.  

使用编译器(gcc /g++)参数-g 可以做到这一点

启动退出:

  •  启动gdb :gdb 可执行文件

  • 退出gdb:quit

  • 启动程序:

    • run (如果有断点,停在第一个断点处)

    • start:程序向下执行一行

  • 设置命令行参数

    • sets  args 可指定运行时参数

    • show args 查看运行参数

显示源代码:

list命令打印程序的源代码.默认打印10行

  • list  linenum: 打印第linenum行上下文内容(默认10行,所以上五行,下五行)
  • list function:显示函数名为function的函数的源程序
  • list: 显示当前行后面的源程序
  • list -:显示当前行前面的源程序

(也可以自己定制显示规范)---默认几行

  • set listsize count:设置一次显示源代码的行数
  • show listsize:查看当前listsize的设置

断点操作(每个断点都有自己专属的序列号)

1)break设置断点,可以简写为b

  • b 10 设置断点在第十行
  • b func设置断点,在func函数入口处

2)多文件设置断点

b filename:linenum(function)---在原文件filename的linenum行/函数处停住

b class::function 在类class的function函数入口处停止

3)查询所有断点

  • info b

4)条件断点(为断点设置条件)

b test.c:8 if val==5

维护断点

  • delete [range] 删除指定断点,其简写命令为d
    • 不指定断点  表示删除所有的断点
  • disable [range] 使指定断点无效,简写命令是dis(还存在,只是无效)
  • enable [range] 使断点有效,简写ena

 调试代码

  • next 单步跟踪  一条语句执行 可简写n
  • step 单步跟踪  函数调用进入被调用函数体内 简写s
  • finish 退出进入的函数
  • until 在一个循环体内单步跟踪时,这个命令可以运行程序直到退出循环  u
  • continue 继续运行程序 ,停在下一个断点 c

数据查看

print 打印变量,字符串,表达式的值,  p

p  count 打印count的值 

自动显示

当程序停住时,或者单步跟踪,这些变量会自动显示.

  • display 变量名
  • info display  查看display设置的自动显示的信息
  • undisplay num (编号)
  • delete display dnums… -- 删除自动显示,dnums意为所设置好了的自动显式的编号。如果要同时删除几个,编号可以用空格分隔,如果要删除一个范围内的编号,可以用减号表示(如:2-5)
  • disable display dnums 
  • enable display  dnums

查看修改变量的值

1)ptype width --查看变量width的类型

type=double 

2)p width --打印变量width的值

3)set var width=47 // 将变量var值设置为47

在你改变程序变量取值时,最好都使用set var格式的GDB命令

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到