一次很酷的GDB附加到进程改变程序运行逻辑的经历

本来一次正常的操作是应该修改配置文件中的一个dumpquote的时间,然后重启程序。但那天修改配置文件后忘了重启,在指定时间没有生成特定quote文件。

此时想起了用gdb试试,大概思路就是:用调试器附加到进程,看能不能在一处特定的定时器函数入口打断点,如果可以就可以试着按参数文件里的参数修改一下内存中的变量,然后单步执行看是不是真的能进入到dump文件的函数。

# 启动GDB
gdb

# 附加到进程,xxxx为实际运行的进程id
attach xxxx

# attach后,进程实际是处于挂起状态

# 试着下断点,发现可以正常设置,后面就比较顺了
break StQuote.cpp:227

# 让程序继续执行,然后程序会在上一行设的断点处暂停
continue


# 观察两个关键变量,还好没有优化掉,可以看到具体值
p StCfg::dumpQuoteClock
p StQuote::quoteDumped

# 修改变量
print StCfg::dumpQuoteClock=54001

# 查看修改后的变量值,起作用了
p StCfg::dumpQuoteClock

# 连续单步执行,可以确认进入到dump quote的函数,实际生成了文件。
next 

# 停用断点
disable 1

# 分离进程
detach

# 退出gdb
quit
 

事后想想,其实也可以不修改变量,在断点停住后,通过jump(j)命令,直接跳转到要执行的代码位置开始执行也是一招。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值