需求
程序崩溃后,希望知道程序到底是因为什么崩溃的,首先需要找到崩溃后的
core
文件,然后调试加载 core
文件。
解决
先在软件的目录寻找 core
文件,如果没有按照下面的步骤来处理。
确认开启了 core
-
查看当前允许的
core
文件的最大大小。ulimit -c
-
设定固定值或者不限制, 单位是
KB
ulimit -c 1024
ulimit -c unlimited
确认 core 文件路径
如果文件路径类似下面这样的,就说明 core
被系统转存了,需要专门导出
cat /proc/sys/kernel/core_pattern
|/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h %e
导出 core
- 导出需要使用
coredumpctl
, 如果没有安装,使用如下命令:sudo apt install systemd-coredump
- 使用
coredumpctl
, 查看崩溃的pid
, 如果显示的不完整,可以使用方向键来查看未完信息。 - 如果崩溃的
pid
为 1234, 并且导出的文件名为core_2023
coredumpctl -o core_2023 dump 1234
加载 core
如果可执行文件名为 main
, 崩溃文件为 core_2023
. 使用如下命令执行:
gdb main core_2023