需求

程序崩溃后,希望知道程序到底是因为什么崩溃的,首先需要找到崩溃后的 core 文件,然后调试加载 core 文件。

解决

先在软件的目录寻找 core 文件,如果没有按照下面的步骤来处理。

确认开启了 core

  1. 查看当前允许的 core 文件的最大大小。

    ulimit -c
    
  2. 设定固定值或者不限制, 单位是 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

  1. 导出需要使用 coredumpctl, 如果没有安装,使用如下命令:
    sudo apt install systemd-coredump
    
  2. 使用 coredumpctl, 查看崩溃的 pid, 如果显示的不完整,可以使用方向键来查看未完信息。
  3. 如果崩溃的 pid 为 1234, 并且导出的文件名为 core_2023
    coredumpctl -o core_2023 dump 1234
    

加载 core

如果可执行文件名为 main, 崩溃文件为 core_2023. 使用如下命令执行:

gdb main core_2023

参考

linux下core文件被系统转存而不能直接找到

Gdb 调试core文件详解

Linux 下使用 gdb 调试 core 文件