linux下Segmentation Fault生成coredump文件进行gdb调试

 

1、在linux下运行程序出现段错误,如果程序不是很大还比较好找,但是如果程序很大,会比较难以定位;在linux下可以支持生成coredump文件,使用gdb来解析Segmentation Fault时发生了什么,可以比较方便的查看程序崩溃的位置;

2、一般linux系统都是默认关闭coredump文件生成,需要执行命令打开;实际上就是配置生成coredump的文件大小,系统默认为0,即不产生coredump文件;

ulimit -c unlimited

3、编译源代码时makefile编译选项添加 [-g] 选项,如果有 [-O] 选项,则设置为"-O0",即不进行优化;

4、正常运行软件,在软件出现段错误时,会在软件运行目录下生成core文件或者core.***文件;

5、使用gdb解析,使用时注意test_app的路径;

gdb test_app core

进入gdb交互界面之后,输入bt,即backtrace,查看调用栈,比如

可以看到#0附近在test.c的第7行出错,可以使用frame 0或者frame 1等等方便的查看使用的代码,这里可以看到是一个赋值语句导致段错误;也可以使用bt full命令查看所有调用栈的变量值或symbol等信息,具体的可以查看gdb调试命令说明;

6、使用gdb调试coredump时的调用栈信息不一定都能非常准确的指出错误的位置,需要去进行分析;比如提示到某个标准库的接口错误,那么应该去查一下调用传参是否正确;

7、可以通过修改/proc/sys/kernel/core_uses_pid来决定是否添加pid扩展名

0为默认值,即不添加,修改为1即添加:echo 1 > /proc/sys/kernel/core_uses_pid

8、可以通过修改/proc/sys/kernel/core_pattern来决定生成core文件的位置和格式

可通过以下命令修改此文件:
echo "/tmp/core-%p-%t" > core_pattern,可以将core文件统一生成到/tmp目录下,产生的文件名为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 添加命令名

posted @   bonelee  阅读(769)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
历史上的今天:
2019-09-20 python dijkstra 最短路算法示意代码
2019-09-20 heapq 对有序的数组列表进行整体排序
2017-09-20 HBase单机环境搭建
2017-09-20 WAF——针对Web应用发起的攻击,包括但不限于以下攻击类型:SQL注入、XSS跨站、Webshell上传、命令注入、非法HTTP协议请求、非授权文件访问等
2017-09-20 常见的DNS攻击——偷(劫持)、骗(缓存投毒)、打(DDos)
2017-09-20 DDos游戏行业受攻击最多
2017-09-20 木马——本质就是cs socket远程控制,反弹木马是作为c端向外发起网络请求
点击右上角即可分享
微信分享提示