【发布时间】:2011-01-31 15:32:25
【问题描述】:
我有一个程序,被kill -STOP 停止。我想在不运行它的情况下获取它的核心转储(程序必须一直停止;如果它会收到一个 SIGCONT,它会在没有 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 并保存一个核心,它将被损坏。 “无法从内存中读取有效的对象文件图像。”
【问题讨论】: