Linux下 生成coredump文件前配置
创始人
2024-03-01 11:51:07
0

一. Linux下coredump文件


在 Linux 系统下,存在一种 coredump机制。

Linux 系统下,在进行 C/C++ 开发时,经常会遇到程序运行突然崩溃的问题。这时可以通过离线调试即 coredump 方式进行 bug 的定位。

具体为当程序出现段错误时,内核错误,通常出现这类的问题是低级bug中的内存访问越界、使用空指针、堆栈溢出等情况。使程序运行过程中异常退出或者终止,满足这些条件就会产生coredump  的文件。

注意:使用 coredump文件分析方法,来定位代码运行崩溃问题时,前提是代码在编译阶段需要加入 -g 编译选项。

二.  更改 coredump文件的生成路径

1.  关闭 apport.service 服务程序

apport.service 服务程序是 ubuntu 系统中自带的程序,默认是开启的。功能是自动生成崩溃报告,官方为了自动收集错误的软件。

在 ubuntu 系统下经过验证,在Linux 系统默认情况下,同时开启 coredump 功能的前提下,对存在段错误的C 代码进行(带 -g 编译选项)进行编译,运行时不会生成 coredump 文件。

经过百度,网上很多技术网友提到,ubuntu 系统默认情况下,会开启一个叫 apport.service 服务程序。这个服务程序用于自动生成崩溃报告,官方为了自动收集错误的。

注意:ubuntu 系统中的 apport.servie 服务程序如果开启着,则无法生成 coredump 文件,因为生成的 coredump 文件已经被这个服务程序处理了。

关闭 apport.service 服务程序方法,Linux终端输入如下命令:

sudo service apport stop      //关闭 apport.service 服务程序

关闭 ubuntu系统下的 apport.service 服务程序,程序运行崩溃时,就会生成 coredump 文件,默认名字为 core 文件,默认与可执行程序在同一目录下。操作如下:

2. 更改 coredump 文件生成路径

在 ubuntu 系统中,默认情况下,当程序运行崩溃时,会生成名字为 core 的 coredump 文件,而且就在可执行程序的当前目录下。

更改 coredump 文件路径的方法分两种:临时更改方式与永久更改方式。

首先,在 /home/wangtian/ 目录创建一个 coredump_file 文件 。

临时更改方法:终端输入命令,命令如下:

echo '/home/wangtian/coredump_file/%t-%e-%p-%c.core' > /proc/sys/kernel/core_pattern

永久更改方法:修改 ubuntu 系统下 /etc/sysctl.conf 文件。

在 /etc/sysctl.conf 文件中添加如下一行:

kernel.core_pattern = /home/wangtian/coredump_file/%t-%e-%p-%c.core

以上两种修改 coredump 文件生成路径的方法,经过测试,都可行。

即可执行程序运行时崩溃时会在 /home/wangtian/coredump_file 目录下生成 1669735675-main.out-3209-209715200.core 文件,如下所示:

三.  Linux 下无法生成 coredump文件的可能原因

Linux 系统下,在进行 C/C++ 开发时,当程序运行突然崩溃时,无法生成 coredump 文件,可能的原因如下:

1.   coredump 功能可能没有开启。

检查是否开启 coredump 功能。终端输入 ulimit -c 命令确认。

开启 coredump 功能有两种方法:临时开启方式与永久开启方式。

2. 被 ubuntu 系统中 apport.service 服务程序自动处理了(即被系统的服务程序吞掉了)。

ubuntu 系统默认情况下,开启了一种服务程序 apport.service。即自动生成崩溃报告,官方为了自动收集错误的。

处理的方法: 可以关闭系统的 apport.service 服务程序(注意:这种方法只是一种临时关闭的,当系统重启后,apport.service 服务程序又会开启)。

输入如下命令,可以临时关闭该服务:

sudo service apport stop    //关闭错误报告

3.  生成 coredump 文件的信号被用户程序捕捉。

操作系统在程序发生异常,而异常信号在进程内部又没有被捕获的情况下,方可生成 coredump 文件。

4. 生成的 coredump 文件太大。

可以通过输入 ulimit -c 命令,可以查询 所设置的 生成的 coredump 文件限制大小。

相关内容

热门资讯

银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
AsusVivobook无法开... 首先,我们可以尝试重置BIOS(Basic Input/Output System)来解决这个问题。...
ASM贪吃蛇游戏-解决错误的问... 要解决ASM贪吃蛇游戏中的错误问题,你可以按照以下步骤进行:首先,确定错误的具体表现和问题所在。在贪...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...