coredump 机制是在 Linux 系统中提供的一种调试机制。
Linux coredump 功能 是当 Linux 系统下应用程序异常时,Linux 内核默认的一种异常信号处理机制,内核会把异常信息与进程内存转储成 coredump 文件。软件开发人员可以通过对该 coredump 文件进行离线调试,定位代码中出现的问题。
常出现这类的问题是低级 bug 中的内存访问越界、使用空指针、堆栈溢出等情况。使程序运行过程中异常退出或者终止,满足这些条件就会产生 coredump 的文件。
coredump 文件分析方法是一种离线调试方法。
这里为了方便起见,以 ubuntu 系统为例,介绍 ubuntu 系统下 coredump 功能的配置流程。流程如下:
1. 开启 coredump 功能。
开启 coredump 功能分临时开启与永久开启。这里使用永久开启的方式:即更改 /etc/security/limits.conf 文件中的内容。操作如下:
去掉 soft core 0 一行前面的注释 ,同时,将 0 改为 unlimited 或 某个数值(如 204800)。更改 limits.conf 文件中内容,如下所示:
* soft core 204800
验证是否开启:终端输入 ulimit -c 命令,可以查看是否已经开启。
0 : 表示未开启。
204800: 表示已经开启。coredump 文件大小为 204800,单位为 blocks。
2. 关闭 ubuntu 系统下的 apport.service 服务程序。
Linux 终端输入 sudo service apport stop 命令可以关闭 apport.service 服务程序。
注意:ubuntu 系统下 apport.service 服务程序,是自动生成崩溃报告,官方为了自动收集错误的功能。
3. 更改 生成的 coredump 文件的路径。更改方式分临时更改与永久更改方式。这里使用临时更改方式。操作如下:
首先,创建一个文件夹。我这里在 /home/wangtian/ 创建了 coredump_file 文件夹。
其次,切换到 root 权限。终端输入 sudo -s 命令。
最后,更改 coredump 文件生成路径。终端输入如下命令:
echo '/home/wangtian/coredump_file/%t-%e-%p-%c.core' > /proc/sys/kernel/core_pattern
4. 运行可执行程序,当程序运行崩溃时,会在自定义文件夹下生成 coredump 文件。
首先,编译代码。编译时需要加 -g 编译选项,旨在生成带调试信息的可执行程序。
其次,运行程序。该代码在运行崩溃时,会在所设置的文件夹目录下生成 coredump 文件。
注意:这里要生成 coredump 文件,则代码中是存在内存访问越界或空指针使用等等的一些问题,导致程序运行时会崩溃的现象。