Linux使用coredump文件调试系列:1 设置生成coredump文件

2231 人浏览 | 时间: 2018-12-05 16:00:16 | 作者: codexia 会员文章,禁止转载

    coredump调试是Linux系统的一个非常有用的调试工具。在上线之后的程序运行过程中,我们无法实时调试,程序一旦崩溃,我们很难知道是什么问题引起的,而coredump就为了准备好了崩溃时候的情况,供我们调试使用。

    那么coredump是什么呢?coredump是一个程序运行时的环境的一个集合,包含了崩溃时的堆栈信息。这个文件是二进制文件,无法用记事本打开。对于这么高大上的技术,其实我开始是拒绝的。后来尝试过一次,发现整了几圈,没有整成功。因为开发时VS可以实时调试,所以也降低了研究这个技术的需求。是的,你没有猜错,我是用VS在写Linux程序,当然也包括了用VS调试Linux程序咯。准确来说,我是使用VS2017在写Linux程序以及调试。有兴趣的朋友,可以阅读《VS2017开发Linux项目的过程:从创建项目到调试运行全程指导》。

    那为什么我现在又要研究coredump技术了呢?因为需要!VS2017开发时候调试非常好用,就和Windows本地程序开发一样,非常方便。可能这是原生Linux程序员没有体会过的吧。哈哈哈。为什么需要呢?程序写好了,放在服务器上运行了。然而不知道什么原因,就突然崩溃了。这种问题往往没有办法直接复现,所以非常的难受。就好像是你感觉身上有一个地方很痒,但是抓哪里都抓不到的样子。如果知道是某种情况下能复现,VS2017还是非常不错的选择的。

    既然如此,只能退而求其次,我们只能借助coredump技术来事后调试,只要能解决问题,难一点也是愿意的。所以借此机会,将这一方面的内容总结分享一下。

    默认情况下,一般Linux系统会关闭coredump文件的生成的,毕竟是要占用一定的系统开销的。所以我们要想办法开启这个黑科技。在开启之前,我们要先确认一下我们的系统是否已经开启了。

1.确认系统是否开启coredump

输入命令:ulimit -a 或 ulimit -c

core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 15245
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 65535
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 15245
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
unlimited
ulimit -c unlimited
#!/bin/bash
# 让coredump文件对所有用户有效
echo -e "# enable coredump whith unlimited file-size for all users\n* soft core unlimited" >> /etc/security/limits.conf
# 设置coredump文件的位置,在目录/data下创建corefile目录,并启用目录权限
cd /data && mkdir corefile && chmod 777 corefile
# 格式化coredump文件名
# %e – 程序文件名 
# %s – 收到的信号,看看进程是如何把杀死的,不同的信号值表示不同的崩溃场景 
# %p – 进程号
# %t – 时间戳,区别多个core文件,这个时间戳值不好看时间,要看时间还是看文件系统的时间
# 每次重启后,由于proc目录是动态更新的,所以系统会初始化core_pattern的值。
echo -e "kernel.core_pattern=/data/corefile/core-%e-singal(%s)-pid(%p)-ts(%t)" > /etc/sysctl.conf
#设置好后重新加载配置
sysctl -p /etc/sysctl.conf
当前文章为会员文章,请前往[用户中心]开通会员后继续阅读。

相关阅读