您的位置:首页 > 博客中心 > 数据库 >

[转]使用gdb调试运行时的程序小技巧

时间:2022-03-10 17:17

原创文章,欢迎转载。转载请注明:转载自淘宝核心系统团队博客,谢谢!
原文链接地址:使用gdb调试运行时的程序小技巧

下面介绍我调试时经常遇到的三种问题,如果大家也有类似的问题交流一下解决方法:
情景1:在不中止程序服务的情况下,怎么调试正在运行时的程序
情景2:需要同时看几个变量的值或者批量查看多个core文件的堆栈信息怎么办
情景3:遇到需要查看、队列、链表、树、堆等数据结构里的变量怎么办

1. 情景1:在不中止程序服务的情况下,怎么调试正在运行时的程序
我们在生产环境或者测试环境,会遇到一些异常,我们需要知道程序中的变量或者内存的值来确定程序运行状态
之前听过@淘宝褚霸讲过用systemstap可以实现这种功能,但systamstap写起来复杂一些,
还有时候在低内核版本的操作系统上用stap之后,程序或者操作系统都有可能死掉。

看过多隆调试程序时用pstack(修改了pstack代码,用gdb实现的,详见http://blog.yufeng.info/archives/873)查看和修改一个正在
执行程序的全局变量,感觉很神奇,尝试用gdb实现这种功能:

保存下面代码到文件runstack.sh

gxlsystem.com,布布扣

这样就可以用plist命令遍历list的值
$ runstack.sh 13434 “plist &input_list”
(gdb) $1 = {next = 0x3d61040, data = ” }
$2 = {next = 0x3d60030, data = “123456\n”, ” }
$3 = {next = 0x3d5f020, data = “12345\n”, ” }
$4 = {next = 0x3d5e010, data = “1234\n”, ” }
$5 = {next = 0×0, data = “123\n”, ” }
(gdb) quit

参考资料:
霸爷的博客:http://blog.yufeng.info/archives/873
gdb从脚本加载命令:http://blog.lifeibo.com/?p=380
gdb官方文档:http://sourceware.org/gdb/onlinedocs/gdb/Command-Files.html
gdb回退: http://sourceware.org/gdb/news/reversible.html
gdb stl调试脚本:http://www.yolinux.com/TUTORIALS/src/dbinit_stl_views-1.03.txt
gdb 高级调试方法:http://blog.csdn.net/wwwsq/article/details/7086151

[转]使用gdb调试运行时的程序小技巧,布布扣,bubuko.com

热门排行

今日推荐

热门手游