我有一个程序,它被 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/

10-12 23:19