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