首页  >   经验  >   Linux使用coredump文件调试系列:3 使用GDB调试coredump

Linux使用coredump文件调试系列:3 使用GDB调试coredump

查看 codexia 的博客 2018-12-05 17:43:15 842 会员文章,禁止转载
coredump  
手机阅读 | 转发赚积分
手机收藏 | 分享给好友
简介本文的目的不是教你如何使用GDB指令调试,而是告诉你如何去用gdb加载coredump进入调试,然后看看崩溃进程的堆栈。主要是先将coredump玩转起来。
感谢 阿里云 对本站(本站由阿里云高性能服务器搭建)的赞助支持,本站推荐 →高性能云服务器2折起优惠由此进←↓
高性能云服务器2折起

    本文的目的不是教你如何使用GDB指令调试,而是告诉你如何去用gdb加载coredump进入调试,然后看看崩溃进程的堆栈。主要是先将coredump玩转起来。我们在《Linux使用coredump文件调试系列1-设置生成coredump文件》中已经讲解了如何去设置生成coredump文件,设置好之后我们在《Linux使用coredump文件调试系列2-编译生成会产生coredump文件的程序并测试》一文中演示了编译产生coredump的方法并测试产生coredump文件。那么我们这里就要开始进入调试coredump文件的环节了。
1.最简单的方式
    直接用gdb加载core文件,命令如下:

gdb /data/corefile/core-test-singal\(11\)-pid\(26676\)-ts\(1544000344\)
    然后会出现以下结果:
GNU gdb (GDB) Red Hat Enterprise Linux (7.2-92.el6)
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
[New Thread 26676]
Core was generated by `./test'.
Program terminated with signal 11, Segmentation fault.
#0 0x00007f9941591ac0 in ?? ()
"/data/corefile/core-test-singal(11)-pid(26676)-ts(1544000344)" is a core file.
Please specify an executable to debug.
(gdb)
    这样就已经带着coredump文件进入到了GDB环境,可以在(gdb)后面输入命令来调试。我们这里只说一个命令,那就是bt即back trace的缩写,也就是查看程序崩溃时的堆栈情况。输入bt之后,显示下面的结果:
(gdb) bt
#0 0x00007f29db527ac0 in ?? ()
#1 0x0000000000000032 in ?? ()
#2 0x00007f29db85ff60 in ?? ()
#3 0x0000000000000400 in ?? ()
#4 0x00007f29db537176 in ?? ()
#5 0x000000000000000b in ?? ()
#6 0x0000000000000004 in ?? ()
#7 0x0000000000000001 in ?? ()
#8 0x0000000000002190 in ?? ()
#9 0x0000000000000005 in ?? ()
#10 0x0000000000008801 in ?? ()
#11 0x0000000000000000 in ?? ()
(gdb)
    可以显示堆栈,但是每一层只有一个地址,调用的函数名称都是问号。
    显然这个调试方法不太好,简单但有问题。我们换第二个。输入Ctrl+Z退出GDB环境。
2.先用gdb启动程序,然后再挂载coredump文件
    这样一来,我们可以将程序的情况先加载到gdb环境里,然后再将coredump加载到gdb里,这样可以读取程序的调试信息,然后结合coredump文件,这样显示的信息会更多些。
    gdb加载程序命令如下:
gdb ./test
    结果如下:

开通会员付1C币>>阅读全文
标注
评论
站内搜
百度搜
传送到手机
手机扫码,识别文字,完成传送x
加载中...
标注内容x
加载中...
添加标注x
收藏 0 点赞 0
公众号
微信赞赏
支付宝赞赏
领支付宝大红包
QQ群

相关阅读

  1. Linux使用coredump文件调试系列:4 加载不出来调试信息的问题解决办法 查找全网同类文章
  2. Linux使用coredump文件调试系列:3 使用GDB调试coredump 查找全网同类文章
  3. Linux使用coredump文件调试系列:2 编译可产生coredump文件的程序并测试 查找全网同类文章
  4. Linux使用coredump文件调试系列:1 设置生成coredump文件 查找全网同类文章
  5. 详解coredump-通过core文件来定位bug位置 查找全网同类文章
  6. 教你如何解决VS2015的30天试用期已过即VS2015许可证已过期的问题 查找全网同类文章
  7. Linux源码笔记——感觉写的巧妙的代码 查找全网同类文章
  8. 在Win7上安装VS2015 RC(候选发布版)失败完美解决方法 查找全网同类文章
  9. 完全图解VS2017安装过程并演示VS2017创建Linux项目和调试 查找全网同类文章
  10. VS2015入门必备介绍,扫扫盲吧 查找全网同类文章
分享到:
分享文章[Linux使用coredump文件调试系列:3 使用GDB调试coredump]到QQ空间

相关阅读

猜您感兴趣