Как получить дамп ядра из остановленной программы (linux) - PullRequest
3 голосов
/ 31 января 2011

У меня есть программа, которая была остановлена ​​на kill -STOP.Я хочу получить дамп ядра без его запуска (программа должна быть остановлена ​​на все время; если она получит SIGCONT, она умрет без coredump).Как я могу получить coredump?

Можно ли сохранить программу в ее текущем состоянии после получения coredump?Это очень редкая ситуация, и я не могу воспроизвести ее, но я должен проанализировать ее.

Спасибо

ОБНОВЛЕНИЯ: gcore не работает.GDB (даже root) не может присоединиться к остановленному процессу (всегда ожидает ptrace PTRACE_ATTACH).Даже dd не может читать из / proc / 99999 / mem с хорошими смещениями из / proc / 99999 / maps (ошибка No such process).

Если я пытаюсь присоединить gdb к процессу и отправить SIGCONT востановленный процесс, я получил

path... linux-nat.c:####: internal-error: linux_nat_attach: Assertion `pid == GET_PID (inferior_ptid) && WIFSTOPPED (status) && WSTOPSIG (status) == SIGSTOP' failed.
A problem internal to GDB has been detected,
further debugging may prove unreliable.
A problem internal to GDB has been detected,
further debugging may prove unreliable.

Если я пойду на GDB и сохраню ядро, оно будет повреждено."Не удалось прочитать действительное изображение объектного файла из памяти."

Ответы [ 2 ]

7 голосов
/ 31 января 2011

Присоединиться к текущему процессу с помощью gdb и выполнить команду generate-core-file.

Или вы можете запустить gcore и указать идентификатор процесса в качестве параметра.

0 голосов
/ 31 января 2011

Отправьте процессу сигнал ABRT, когда он остановлен, затем перезапустите его с помощью CONT.Он выведет дамп ядра и прервет его.

Если перезапустить процесс по какой-то причине не представляется возможным, вы можете попробовать просмотреть псевдофайл / proc / [pid] / mem, но он не в основном форматепоэтому он менее полезен.

...