[转]使用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
这样就可以用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