ubuntu | linux下程序崩溃生成coredump的方法

一. 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 文件 。

临时更改方法:具体如下:

首先,切换到 root 权限。终端输入 sudo -s 命令。

其次,终端输入命令。命令如下:

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 文件限制大小。

  • 45
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Windows 平台上,应用程序崩溃时可能会产生 Core Dump 文件,通常以 .dmp 后缀结尾。这个文件包含了应用程序崩溃时的内存状态,可以帮助开发者定位和解决问题。以下是处理 Windows 应用程序崩溃产生 Core Dump 的一些方法: 1. 启用 Windows Core Dump 在 Windows 上,默认情况下是不启用 Core Dump 的。使用以下命令可以启用 Core Dump: ``` reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps" /v DumpType /t REG_DWORD /d 2 /f ``` 2. 使用 Visual Studio 调试 Core Dump Visual Studio 支持使用 Core Dump 进行调试。可以使用 Visual Studio 打开 Core Dump 文件,并分析崩溃的原因。具体的操作步骤可以参考 Microsoft 官方文档。 3. 使用 WinDbg 调试 Core Dump WinDbg 是一款微软开发的用于 Windows 平台上的调试器,支持分析 Core Dump 文件。可以使用 WinDbg 打开 Core Dump 文件,并分析崩溃的原因。具体的操作步骤可以参考微软官方文档。 4. 使用第三方工具分析 Core Dump 除了使用 Visual Studio 和 WinDbg,还有一些第三方工具可以用来分析 Core Dump 文件,比如 Process Explorer、GDB 等。这些工具都有各自的优缺点,开发者可以根据自己的需要选择合适的工具。 总的来说,处理 Windows 应用程序崩溃产生 Core Dump 的过程比较复杂,需要开发者具备一定的调试经验。建议在处理 Core Dump 之前先了解一下相关的调试工具和技术。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值