GDB调试器

生成调试信息

GDB主要用于去调试c/c++程序。需要调试的c/c++程序,首先在编译时,我们必须要吧调试信息加到可执行文件中。使用编译器(cc/gcc/g++)的-g参数。如果没有-g参数,你将看不见程序的函数名,变量名,所代替的全是运行时的内存地址。

启动GDB

  • 使用命令gdb ./a.out
  • 设置运行时参数
    set args 可以指定运行时的参数。
    show args 查看设置好的参数。
  • 启动程序
    run:程序开始执行,如果有断点,停在第一个断点处
    start:程序向下执行一行

显示源代码

用list命令来打印程序的源代码,默认打印10行

  • list linenum: 打印第linenum行的上下文内容
  • list function:打印函数名为function的函数的源程序
  • list:显示当前行后面的源程序
  • list -:显示当前行前面的源程序。

一般时打印当前行的上5行和下5行,如果显示函数不是,可以设置一次显示源程序的行数。

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

断点操作

简单断点

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

  • b 10在第10行设置断点
  • b func在func函数入口处设置断点
多文件设置断点

c++中可以使用class::function或function(type, type)格式来指定函数名。如果命名空间,可以使用namespace::class::function或者function(type,type)格式来指定函数名.

  • break filename:linume 在源文件filename的linenum行设置断点
  • break filename:function 在源文件filename的function函数入口处设置断点
  • break class::function 在类class的function函数处设置断点
  • break namspace::class::function 在命名空间namespace的类class的function函数入口处设置断点
查询所有断点
  • info b
  • info break
  • i break
  • i b

条件断点

为断点设置一个条件,使用if关键字后面跟其断点条件.

设置一个条件断点:

在test.c文件中的第十行当value=5的时候停止
b test.c:10 if value==5

维护断点

  • delete [range..]删除指定的断点,简写为d
    如果不指定断点号,就表示删除所有的断点。range表示断点的范围(3-7).
     
  • disable [range...]使断点无效,简写命令就是dis.
    如果什么都不指定就是表是disable所有的断点。
  • enable [range...]使无效断点生效,简写命令ena。
    如果不指定,就表示enable所有的断点。

调试代码

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

数据查看

查看运行时的数据 print count 打印变量count的值 简写为p

自动显示

设置一些自动显示的变量,当程序停止时,或者在单步时,这些变量会自动显示,相关GDB吗,命令时display。

  • display变量名
  • info display 查看display设置的自动显示的信息
  • undiplay num (info display显示的编号)
  • delete display dnums  删除自动显示,dnunms为设置号的自动显示的编号。如果要同时删除几个,编号可以用空格分隔,如果要删除哦一个范围内的编号,可以用减号表示(如:2-5)
  • disable display dnums
  • enable display dnums
    disable 和 enable 不删除自动显示的设置,而是让其失效或恢复

查看修改变量值

  • ptype width  查看变量width的类型
  • p width 打印width的值

还能使用set val命令来告诉GDB,来设置val的值。

  • 20
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值