linux 上用 core 文件定位线上问题

一直以来都以为这个是不是很难,最近没push必须用这个,发现原来异常简单。


1. 启用 core文件

首先

ulimit –a

查看是否开启core文件

PixPin_2025-04-23_16-41-09

看第一行的  core file  size,像这样为0的话就是没开。就需要用下面的命令开启

ulimit -c unlimited

开启,然后再  ulimit –a 查看开启情况

image

tip 1:  ulimit –c  后面可以跟具体的数值,单位是K,如1024,但是如果程序core文件大小超过设定的值的话,就会被截断,从而可能无法定位到具体哪一行。所以稳妥起见,建议用  unlimited.

启用就完成了,就这么简单。

tip 2: core文件启用只对执行了 ulimit –c 的窗口有效

然后就等一个错误发生,比如我这里是一个段错误,在734行

image


2. 在设置开启了core文件的窗口运行代码

image

如愿报了一个段错误。

这个时候在这个执行目录下就会生产一个 core文件

image


3. 分析错误位置

用gdb来定位段错误位置

gdb  so库文件 core文件

比如我的

image

然后安说的输入c就可以出下面结果

image


4.docker 里面无法生产core文件问题

以上操作在主机上操作的时候,我这边没有出现过问题。但是后面在docker里面,出现了执行 ulimit –c unlimited 之后,却并没有生成core文件。这是因为系统在产生 Core Dump 文件的时候是根据 /proc/sys/kernel/core_pattern 的设定。而默认的设定是 |/usr/share/apport/apport %p %s %c %P,也就是用管道传给 apport。然而 Docker 里面的系统不一定有装 apport。
在宿主机上执行:

echo core.%p > /proc/sys/kernel/core_pattern















posted @ 2025-04-23 17:59  yeren2046  阅读(94)  评论(0)    收藏  举报