linux怎么导出dmp文件怎么打开,Linux开发实用工具之详解coredump-dmp文件怎么打开...

linux怎么导出dmp文件怎么打开,Linux开发实用工具之详解coredump-dmp文件怎么打开..._第1张图片

在开发Linux的程序时,例如游戏服务器,有时会异常终止或者崩溃,此时没有任何日志,也不能定位到崩溃代码的位置,有些老手会告诉你去查看coredump,那什么是coredump, 又怎么查看呢?这里就跟大家讲一讲

什么是coredump

coredump是程序异常终止或崩溃时,操作系统将当时内存、寄存器、堆栈等数据记录下,并保存在一个文件中,可以简单理解成是一个快照文件

开启coredump功能

如果不知道是否开启coredump功能,可以在命令行中输入:ulimit -c, 如果返回的结果是0,表示没有开启coredump。

开启coredump的方法,可以输入命令: ulimit -c size 开启,size是文件大小,以blocks为单位,1个block为512bytes, 也可以设置成unlimited,表示不限制coredump文件的大小。

这种方法,只会在当前会话生效,可以将 ulimit 的命令加到 /etc/profile 中修改所有用户的环境变量。

还可以修改 /etc/security/limits.conf 文件 和 在程序中使用 setrlimit 函数来设置,笔者没有具体使用,这里就不详细介绍

修改coredump的保存路径

默认情况下,生成的coredump保存在可执行程序的当前目录下, 文件名为core.

有时候程序可能会反复崩溃,这样上次产生的coredump文件会被覆盖掉,这种情况,可以通过修改coredump的文件名和路径来解决,具体方法如下:修改 /proc/sys/kernel/core_uses_pid 文件,将内容改为1. 可以使用core文件名自动加上pid, 此时core文件名将变成core.pid, pid为进程的PID

修改 /proc/sys/kernel/core_pattern 文件,例如内容修改为:/tmp/core.e%.%p.%t , 即表示将core文件保存到 /tmp目录,文件名为:core.可执行程序名称.进程PID.时间戳

以下为文件名参数列表:%p - 进程的pid

%u - 当前的uid

%g - 当前的gid

%s - 产生coredump的信号

%t - 产生coredump的时间戳

%h - 主机名

%e - 可执行文件的名称

查看coredump文件

查看coredump文件有很多工具,这里简单讲一下使用gdb查看

例如当程序 cli发生崩溃,产生coredump文件为core,可以使用下面的命令查看gdb -c ./core cli

然后输入bt full, 就可以查看到详细的调用栈,这样就可以根据显示的信息,找到崩溃的地方。

你可能感兴趣的:(linux怎么导出dmp文件怎么打开,Linux开发实用工具之详解coredump-dmp文件怎么打开...)