Ubuntu生成可供GDB调试的core文件

core文件做用

用gcc -g选项编译出来的debug版本程序, 在出现"段错误(核心已转储)"时生成具备堆栈信息和调试信息的文件, 供GDB查看html

配置生成core文件

这篇博客使用的系统时Ubuntu18.04,命令行  ulimit -c  查看core大小. 默认是0, 也就是不生成core文件。可使用 ulimit -c unlimited 也就是不限制生成大小,若是你想控制生成core文件的大小, 可使用 ulimit -c 1024 之类的。这个命令是临时有效,也就是说重启又会恢复默认关闭,我曾尝试过将命令写入到 /etc/rc.local 文件,企图程序启动当即执行该命令达到永久生效的效果(这种作法是参考其余博客,不知道是否是由于个人系统是18.04,他们大可能是16或者更早版本缘故),这种作法在我这边没有效果,重启仍是会默认关闭。app

参考其余博客,发现能够经过修改 /etc/security/limits.conf 让 ulimit -c unlimited 永久生效。文件配置以下图:spa

红色框选出来的是针对root用户设置限制生成core文件大小为 unlimited , 具体每列对应的值信息去参考该文件里面的注释说明,注释写的很详细。.net

配置生成core文件的路径和名字格式

core文件名称和路径若是不配置, 每次生成core文件时,会生成在发生段错误程序的当前目录,文件名是 core , 在当前程序目录生成core文件没什么很差,可是想到core文件会比较大,动辄会到 MB 单位,因此建议生成到同一个目录下,方便清理。配置很简单,只要经过输入  echo "/corefile/core-%e-%p-%t" > /proc/sys/kernel/core_pattern 命令设置 core 文件名和保存路径,命令参数说明以下:命令行

%p - insert pid into filename 添加pid
%g - insert current gid into filename 添加当前gid
%s - insert signal that caused the coredump into the filename 添加致使产生core的信号 
%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 添加命令名debug

很不幸,个人Ubuntu18.04系统设置完这个以后,重启依然也是被覆盖了。参考了其余博客和屡次尝试以后,发现每次是重启由于 apport程序 会将本身生成核心转储文件保存在特定目录,从而将这个生成路径写死在 core_pattern文件里,致使配置好的路径每次重启就会恢复默认的。无奈,我决定把该程序关闭,由于这个apport程序只是将系统运行时出现的错误上报给开发Ubuntu系统的公司,对我来讲是没有用的。修改 /etc/default/apport文件,enabled 设置为0unix

文件的路径名称,经过修改 /etc/sysctl.conf 文件, 加入 kernel.core_pattern = /corefile/core-%e-%p-%t 便可。调试

结语

以上配置操做, 在Ubuntu18.04 版本是有效的,请读者参考时注意此点!!!htm

参考博文

https://www.jianshu.com/p/e38a3f1cf7f7blog

https://blog.csdn.net/wkd_007/article/details/79757289

https://my.oschina.net/987openlab/blog/94634

https://www.cnblogs.com/faithfu/p/11933780.html

https://blog.csdn.net/chrisniu1984/article/details/12050951

相关文章
相关标签/搜索