Как включить дамп ядра в моей программе на Linux С++

Моя программа написана на С++. скомпилирован с gcc, используя -g3 -O0 -ggdb флаги. Когда он падает, я хочу открыть свой основной дамп. Создает ли он файл дампа ядра, или мне нужно что-то сделать, чтобы включить создание дампа ядра, в самой программе или на компьютере, где он выполняется? Где этот файл создан и каково его имя?

Ответ 1

Вам нужно установить ulimit -c. Если у вас есть 0 для этого параметра, файл coredump не создается. Так сделайте так: ulimit -c unlimited и проверьте, правильно ли все ulimit -a. Файл coredump создается, когда приложение выполнило, например, что-то неуместное. Имя файла в моей системе: core.<process-pid-here>.

Ответ 2

Вы можете сделать это так внутри программы:

#include <sys/resource.h>

// core dumps may be disallowed by parent of this process; change that
struct rlimit core_limits;
core_limits.rlim_cur = core_limits.rlim_max = RLIM_INFINITY;
setrlimit(RLIMIT_CORE, &core_limits);

Ответ 3

По умолчанию во многих профилях по умолчанию используется 0 размер основного файла, поскольку средний пользователь не знает, что с ними делать.

Попробуйте ulimit -c unlimited перед запуском вашей программы.