GDB调试入门备忘

本文介绍GDB调试器的基本使用方法,包括启动、运行程序、设置断点、检查数据等核心功能,以及高级用法如遍历函数堆栈、与shell通信等。

GDB调试

1、启动gdb:gdb 程序名 内存转存文件 例如:$ gdb hello core

-q 不显示许可信息

-d dirname dirname是目录名 告诉gdb查找源代码的目录,默认是当前目录 

2、运行程序:命令run ,可以在run后面跟参数,如同程序参数一样。

3、设置变量:使用set和unset来设置和取消环境变量,例如:

set args arg1 arg2 ...   被调试的程序需要的选项和参数

set environment env1 env2 ... 设置环境变量

4、帮助:使用help 或 help all命令来获得帮助

5、调试中查看代码和错误信息:

(gdb)backtrace  追踪错误,生成导致错误的函数树 可以简写为back

(gdb)list 查看错误首次出现的位置 不带参数的list命令默认是附近10行代码,list [m,n] m和n是错误首次出现位置的代码段的起始行和结尾行的行号

6、检查数据:

gdb能够显示被调试程序中几乎任何表达式、变量或者数组的类型和值。

使用方法:print 表达式

使用$1,$2...来检查数值的历史记录项,例如:print $1 或print $1-1

使用数组名@N,来打印数组开头N个内存地址值,例如:print ary@10

使用数组名[下标]@N,来打印数组下标开始的N个元素的值,例如:print ary[1]@5 打印ary第一个元素开始的5个数组元素值

whatis 查看变量类型,例如:whatis ary

7、设置断点:

gdb允许行号,函数名设置断点,还可以设置条件断点。

行号设置断点:break linenum 或 break filename:linename

函数名设置断点:break funcname 或 break filename:funcname

条件断点:break linenum if expr 例如:break 15 if i==12

 break funcname if expr

设置断点后可以使用run来运行程序,会提示是否重新开始,选择yes/y

之后可以使用continu 命令继续运行程序调试。

使用info breakpoints 命令来查看设置了那些断点以及那些断点已经被触发。

delete  N :允许删除断点,N是断点号;不指定断点号则删除所有断点。例如:delete 3 

disable N :使断点无效,,N是断点号;不指定断点号则屏蔽所有断点。例如:disable 3

enable N :重新使无效的断点有效,N是断点号;不指定断点号则使所有断点有效。例如:enable 3


ptype 变量名 :查看变量详细的类型

set variable 变量名=值 :给一个变量设置新值

next :遇到一个函数时,next命令执行整个函数

step :单步进入函数,每次仍然执行一个语句。

call name(args) :调用并执行名为name,参数为args的函数

finish:如果可以,,则终止当前函数并打印它的返回值

return value:停止执行当前函数,并将value返回给调用者。


8、gdb的高级用法:

file::varname:file是源文件名称(使用时要用单引号),varname是想要引用的变量名称。例如:print 'foo.c'::baz

funcname::varname:funcname是函数名称(使用时要用&符开头)。例如:print &func::idx

9、遍历函数堆栈:

where:打印出逆序的函数调用链

up:将调用栈上移一个函数调用

down:控制移回由up上移的函数

10、操纵源代码:

gdb -d 目录 -d 目录:可以使用一个或多个-d<路径>选型启动gdb,来指定多个源代码搜索路径

search <字符串> 查找特定字符串在当前文件中下一次出现

reverse-search return 反向查找

11、与shell通信

shell 命令 即可执行shell命令

12、附加到某个运行中的程序

gdb 程序名称 PID 来启动

如果已经启动gdb,可以使用file和attach

file 程序名称

attach PID

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值