Как сделать дамп ядра, даже если процесс работает нормально?

В Linux при сбое процесса создается дамп ядра.

Однако я хочу создать дамп ядра, когда процесс не дает сбоев, но выглядит некорректно. Удаленному эксперту нужен дамп ядра для анализа.

Под Windows мы можем создать файл дампа процесса через диспетчер задач, и после этого процесс все еще работает.

Возможно ли это под линуксом?


person xmllmx    schedule 21.12.2014    source источник


Ответы (4)


Позвони gdb, затем

attach pid
gcore

где pid - это идентификатор рассматриваемого процесса.

person Wintermute    schedule 21.12.2014

Вы можете использовать утилиту gcore прямо из командной строки:

gcore [-o filename] pid

Кстати, если вы хотите видеть только трассировку стека процесса, утилита gstack сделает это.

Обе утилиты поставляются с gdb.

person Evgeny Kluev    schedule 21.12.2014

Вы можете сделать это в своем коде с помощью:

if (fork() == 0) abort();
person Marian    schedule 21.12.2014
comment
Это, вероятно, не лучшее решение, но, черт возьми, оно умное :) - person Benjamin Gruenbaum; 21.12.2014

Если вы хотите сделать это программно, попробуйте использовать google-coredumper. Их пример:

#include <google/coredumper.h>
...
WriteCoreDump('core.myprogram');
/* Keep going, we generated a core file,
 * but we didn't crash.
 */
person Community    schedule 21.12.2014