GDB调试常见用法总结

生成调试信息

gcc -g test.c -o test
g++ -g test.cpp -o test

启动

gdb test
gdb pro PID

程序运行参数

set args [argu1 argu2 ...] 
# 指定运行参数
show args
# 查看运行参数
run/r [argu1 argu2 ...]
# 指定运行参数并运行

断点

# 查询所有断点
info b
# 设置简单断点
b/breakpoint [lineno]
b/breakpoint [functionname]
# 多文件设置断点
b/break filename:lineno
b/break filename:function
b/break class::function
b/break namespace::class::function

观察点

# 当EXPR的值被改变时停止
watch EXPR
# 当EXPR的值或地址被改变时停止
watch -l/location EXPR
# 当EXPR被读写时停止
awatch EXPR
# 当EXPR被读时停止
rwatch EXPR
# 查看观察点
info watchpoints

条件断点

# 同时设置断点和停止条件
b/break lineno if val == num 
# 在设置断点之后设置停止条件
condition breakpoint num EXPR
# 忽略断点
ignore N count

维护断点

# 删除全部断点
clear
# 删除指定函数断点
clear functionbreakpoint
# 删除指定行断点
clear lineno
# 删除指定文件的行断点
clear filename:lineno
# 删除全部断点
delete/d
# 删除num1~num2之间的全部断点
delete/d [num1-num2]
# 禁用指定范围内的断点
disable [breakpoints] [range]
# 解除指定范围内的断点
enable [breakpoints] [range]
# 指定范围内的断点可执行一次
enable ]breakpoints] once [range]
# 执行断点后即删除
enable [breakpoints] delete [range]

command命令

#  在断点处同时执行多条指令
	break fun if x > 0
	commands
   >printf "x is %d" ,x 
   >c
   >end

调试

run/r 			# 直接运行代码
start			# 执行代码至main函数
step/s			# 步进,并进入函数体中
next/n			# 步进,不进入函数体中
finish			# 从函数中退出
until/u			
continie/c		# 继续执行
si/ni			# 单步跟踪机器指令
info program	# 查看程序是否成功运行

查看运行时的数据

print/p COUNT	
print/p cnt1+cnt2+cnt3
# EXPR可使用当前函数常量、变量、函数,但是不能使用宏
print/p EXPR

程序变量

# 全局变量 静态变量 局部变量
print/p 'file'::var
# 数组变量:@左边是第一个内存地址的值,@右边是内存长度
print/p arr[0]@len

自动显示

display EXPR
disalbe display lineno
enable display lineno

打补丁

set x=4 # 可能会出现变量名与GDB中变量发生冲突
set var x=4

跳转执行

jump lineno
jump file:lineno
jump +num # 偏移量

强制函数操作

# 强制函数返回
return 		[EXPR]
# 如果EXPR是函数则强制调用
call 		EXPR
print/p 	EXPR

源代码显示

# 设置list大小
set listsize n
# 查看list大小
show listsize
# 列出n行代码,默认是10行
list 
# 列出function/lineno附近的代码
list funciton/lineno
# 显示前面的源程序
list -

调试以运行的进程

gdb PID process-id

多线程调试

break/b lineno thread threadno

栈操作

# 查看栈信息
breaktrace/bt
# 打印栈顶的n层信息
breaktrace/bt n 
# 打印栈底的n层信息
breaktrace/bt -n
# 切换栈至第n层
frame/f n
# 向上/下移动栈
up/down [n]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值