linux下在没有core文件时利用系统日志和map文件定位core 问题

背景说明

     在程序产生了奔溃,而 未打开产生core dump配置(即ulimit -c unlimited)等,或者打开了core dump 配置而产生的core文件过大无法拷贝或者难以从现场拿回。开发人员通过日志确认问题时,很多时候因日志注释不够全面或者core时把日志给截断了而导致日志不全,难以分析。

方法说明:

      Linux 环境中如果发生Segmentation fault等问题core dump 时,在系统日志中一般都可以存储日志信息,而且信息中存在有一个符号地址,该地址则是发生问题所在或者附近。故而此时可以去查看系统日志,且过滤出需要的信息找到该地址值。在得到该地址值后则可以根据编译时的map 文件去对应找到出问题的代码所在处。如果map文件不存在,则将代码回退至发布的版本进行编译得到map 文件,但需要保证编译环境是一样的,因为不同环境的red hat对应的各文件标记符号映射关系不一样。

验证说明:

        使用如上代码编辑进行运行,代码中标红之处,在运行时会产生段错误进而程序崩溃。此时如果没有ulimit -c unlimited 则不会产生core dump 文件。但可以到系统日志中查看到系统日志中有记录说明该程序在运行时发生了段错误,而且带有一个地址信息,于/var/log/messages 文件可查看 。

上图中在 /var/log/messages 文件中则可以看到 test 程序运行2次都在 4009dc地址 这个位置发生了错误。

此时再次去test程序对应的map 文件中查找4009dc 这个地址的位置或者其附近的代码可看到其里main 函数最近,进而可确定发生文件的位置在main 函数中,最后在计算其偏移量去确定具体位置。

对比使用ulimit -c unlimited 打开后产生core文件可看出其对应的位置是一致的:

 

备注:

1、系统日志不一定是在/var/log/messages 这个文件中,可能是其它文件中,但是其是按照日期存在,按照对应文件去取即可。

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值