GDB精讲

1,简介

GDB(GNU Debugger)是GCC的调试工具。其功能强大,现描述如下:

GDB主要帮忙你完成下面四个方面的功能:

     1.启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。

     2.可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)

     3.当程序被停住时,可以检查此时你的程序中所发生的事。

     4.动态的改变你程序的执行环境。

2,生成调试信息

在使用gcc 或者g++时加上-g参数

gcc hello.c -o hello -g

g++ hello.cpp -o hello -g

如果没有-g,你将看不到程序的函数名,变量名,所代替的全是运行时的内存地址。

3,启动GDB的方法

gdb 可执行程序

4,程序运行上下文

set args 可指定运行时参数 (如:set args 10 20 30 40)

show args 命令可以查看设置好的运行参数

cd 相当于shell的cd命令

pwd显示当前的所在目录

5,设置断点

5.1,简单断点

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

b 10设置断点,在源程序第10行

b func 设置断点,在func函数入口处

5.2,多文件设置断点

在进入指定函数时停住:

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

     break filename:linenum -- 在源文件filename的linenum行处停住

     break filename:function -- 在源文件filename的function函数的入口处停住

     break class::function或function(type,type) -- 在类class的function函数的入口处停住

     break namespace::class::function -- 在名称空间为namespace的类class的function函数的入口处停住

5.3,查询所有断点

info b

6,条件断点

一般来说,为断点设置一个条件,我们使用if关键字,后面跟其断点条件

b test.c:8 if i=5

7,维护停止点

delete[range...]删除指定的断点,如果不指定断点号,则表示删除所有的断点。range表示断点号的范围.可以简写d

比删除更好的一种方法是disable停止点,disable了的停止点,GDB不会删除,当你还需要时,enable即可

disable[range...]:如果什么都不指定,表示disable所有的停止点。简写dis

enable[range...]:如果什么都不指定,表示able所有的停止点。简写ena

8,代码调试

run 运行程序,可简写为r

next 单步跟踪,函数调用当作一条简单语句执行,可简写为n

step 单步跟踪,函数调用进入被调用函数内,可简写为s

finish 退出进入的函数

until 在一个循环内单步跟踪时,这个命令可以运行程序直到退出循环体,可简写为u。

continue 继续运行程序,可简写为c

9,查看运行时数据

print 打印变量,字符串,表达式的值,可简写为p

10,自动显示

可以设置一些自动显示的变量,当程序停住时,或在你单步跟踪时,这些变量会自动显示。命令为display

display 变量名

info display --查看display的自动显示的信息

undisplay num (info display时显示的编号)取消跟踪

delete display dnums 删除自动显示 也可以删除一个范围

disable display dnums

enable display dnums

disable和enalbe不删除自动显示的设置,而只是让其失效和恢复

11,查看修改变量的值

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

p width --打印变量width的值

你可以使用set var命令来告诉GDB,width不是你GDB的参数,而是程序的变量名,如:

          (gdb) set var width=47

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

12,显示源代码

list linenum

list function 显示函数名为function的函数的源程序

list 显示当前行后面的源程序

list - 显示当前行前面的源程序

set listsize count 设置一次显示源代码的行数

show listsize 查看当前listsize的设置

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值