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 添加命令名
相关文章
- Linux上安装ROS的步骤指南(linux安装ros)
- Linux文件的扩展名称研究(linux文件扩展名)
- 文件Linux下安全保存配置文件的技巧(linux保存配置)
- Linux权限分配:简单易行就能掌控(linux权限赋值)
- Linux文件权限: 为用户定制权限(linux文件给用户权限)
- 建立安全的Linux服务器用户管理体系(linux服务用户管理)
- Linux清除缓存的简易方法(linux刷新缓存)
- Linux系统数据恢复:带你轻松重回海洋底(linux数据恢复软件)
- Linux将数据保存到文件的简便方式(linux保存到文件)
- Linux下实现电视直播的新方式(linux电视直播软件)
- 开启Linux之旅:学习Linux编码格式(linux编码格式)
- Linux开启异步IO:变革新动力(linux异步io开启)
- Linux下合并两个文件的方法(linux两个文件合并)
- Linux视频高级教程:学习如何像专家那样使用Linux(linux视频高级教程)
- 日志文件Linux如何快速删除Nginx日志文件(linux删除nginx)
- Linux下安全访问U盘文件(linux打开u盘文件)
- 管理优化Linux远程用户管理实践(linux远程用户)
- 使用ISO文件挂载Linux系统简单易行(iso挂载linux)
- Linux维护模式使用技巧分享: 解决常见问题(linux维护模式)
- 轻松学习:Linux命令打开txt文件(linux命令打开txt)
- Linux输入法操作快捷之道(linux输入法快捷键)
- 掌握Linux之道:开始阅读Linux源码(linux源码阅读)
- 解锁Linux世界:2进制文件(linux2进制文件)
- “保护您的文件:使用Linux加锁技术”(linux给文件加锁)
- Linux下文件合并的命令操作指南(linux 文件合并命令)
- Linux:一种免费的操作系统的推广与应用(linux的推广)
- Linux 下如何查看日志文件(linux 查看日志文件)
- 把Linux动态调试融入编程流程(linux 动态调试)