我有一个程序,它被 kill -STOP
停止了。我想在不运行它的情况下对其进行核心转储(程序必须一直停止;如果它将收到一个 SIGCONT,它将在没有核心转储的情况下死亡)。如何获得核心转储?
进行核心转储后是否可以将程序保持在当前状态?这是一种非常罕见的情况,我无法重现,但我必须对其进行分析。
谢谢
更新: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 并保存一个核心,它将被损坏。 “无法从内存中读取有效的目标文件图像。”
最佳答案
使用 gdb
附加到当前进程并发出 generate-core-file
命令。
或者您可以运行 gcore
并提供进程 ID 作为参数。
关于linux - 如何从停止的程序(linux)中获取核心转储,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4852655/