gdb学习

gdb调试的三种类型:

命令

  • gdb program core
  • show language, set language c++
  • bt, bt full
  • f 可以跳转到某个栈中位置
  • i locals 显示当前调用栈的所有变量
  • i register 显示当前调用栈的寄存器值,主要是查看地址
  • thread apply all bt
  • info threads 可以查看所有线程的信息
  • thread 可以具体跳转到某个线程
  • disassemble 显示指令

编译可执行文件的要求

  • gcc -DDEBUG -g -o debug debug.c

内核转储

启用

  • ulimint -a, ulimit -c, ulimit -c unlimited

路径与文件名

  • 内核参数kernel.core_pattern
    • echo "core" > /proc/sys/kernel/core_pattern
    • 可执行文件所在目录 生成文件名为core的内核转储文件???
    • 在哪个目录启动可执行文件,core文件就生成在这个目录???
    • echo"/corefile/core-%e-%p-%t" >core_pattern
      • 将core文件统一生成到/corefile目录下
      • 产生的文件名为core-命令名-pid-时间戳
    • 以下是参数列表:
      • %p - insert pid into filename 添加pid
      • %u - insert current uid into filename 添加当前uid
      • %g - insert current gid into filename 添加当前gid
      • %s - insert signal that caused the coredump into the filename 添加导致产生core的信号
      • %t - insert UNIX time that the coredump occurred into filename 添加core文件生成时的unix时间
      • %h - insert hostname where the coredump happened into filename 添加主机名
      • %e - insert coredumping executable name into filename 添加命令名
  • 内核参数kernel.core_uses_pid
    • 表示是否在生成的内核转储文件后添加 进程号后缀
    • echo "1" >/proc/sys/kernel/core_uses_pid
  • 修改/etc/sysctl.conf文件
kernel.core_pattern=/var/core/core.%p
kernel.core_uses_pid=0

遇到过的问题

signal SIGBUS 7, Bus error

  • 怀疑是由于mmap之后,源文件被改变(内容变少),造成访问越界

signal SIGABRT 6, Aborted

  • 怀疑是double free
  • 使用boost::shared_ptr出现了问题
  • 也怀疑是内存不足,分配失败
  • 析构的时候有竞态问题?

参考资料
gdb调试之基础篇
gdb调试之实用技巧篇
Linux GDB core高级调试
善用GDB 调试一些函数栈被毁坏的问题
段错误调试神器 - Core Dump详解
由mmap引发的SIGBUS
排错经历:全局变量被多次析构

转载于:https://www.cnblogs.com/wangzhiyi/p/9545564.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值