linux开发coredump 使用

(适用于无法直接跑gdb(比如内存不够,一跑就挂),或跑了gdb就没有错误了

原理:由于系统关键/核心进程,产生严重的无法恢复的错误,为了避免系统相关资源受到更大损害,操作系统都会强行停止运行,并将当前内存中的各种结构,核心进程出错位置及其代码状态,保存下来,以便以后分析。最常见的原因是指令走飞,或者缓冲区溢出,或者内存访问越界。走飞就是说代码流有问题,导致执行到某一步指令混乱,跳转到一些不属于它的指令位置去执行一些莫名其妙的东西(没人知道那些地方本来是代码还是数据,而且是不是正确的代码开始位置),或者调用到不属于此进程的内存空间。写过C程序及汇编程序的人士,对这些现象应当是很清楚的。

ulimite 命令:修改 shell 资源限制。
    在允许此类控制的系统上,提供对于 shell 及其创建的进程所可用的资源的控制。

. 启用内核转储

1.1 查看内核转储是否有效

在终端中输入以下命令,查看内核转储是否有效。

#ulimit -c

0

-c 表示内核转储文件的大小限制,现在显示为零,表示不能用。

可以改为1G

#ulimit -c 1073741824

也可以改为无限制

#ulimit -c unlimited

 然后直接运行程序,如果程序参数段错误,

后面会有(core dumped),表示内核转存储成功。在当前目录会生成 core 文件

看,很大,所以一般在挂载目录下运行程序。

生成了core文件,可以直接用gdb进行分析,

注意格式, ./gdb edvr core 中间的表示运行的程序

现在可以直接用bt查看栈了

查看当前栈层更详细信息

 

查看当前函数中所有局部变量及其值

 

info args

打印出当前函数的参数名及其值。

 

info locals

打印出当前函数中所有局部变量及其值。

 

info catch

打印出当前的函数中的异常处理信息。

 

像上面提示No symbol table info available ,注意查看 编译的时候是否 加了-g,是否被striped

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值