是否可以获取 gdb 或使用其他一些工具来创建正在运行的进程及其符号表的核心转储?如果有一种方法可以在不终止进程的情况下执行此操作,那就太好了。

如果可能的话,您会使用什么命令?(我正在尝试在 Linux 机器上执行此操作)

有帮助吗?

解决方案

$ gdb --pid=26426
(gdb) gcore
Saved corefile core.26426
(gdb) detach

其他提示

或者运行 gcore $(pidof processname).

这样做的好处是(相对于运行 gdb 并向 CLI 发出命令)您可以在尽可能短的时间内附加和分离。

笔记: 以下方法将终止正在运行的进程并且也需要符号。

您可以向正在运行的进程发送以下信号之一(使用 action=core):
从: http://man7.org/linux/man-pages/man7/signal.7.html

       Signal     Value     Action   Comment
       ──────────────────────────────────────────────────────────────────────
       SIGHUP        1       Term    Hangup detected on controlling terminal
                                     or death of controlling process
       SIGINT        2       Term    Interrupt from keyboard
       SIGQUIT       3       Core    Quit from keyboard
       SIGILL        4       Core    Illegal Instruction
       SIGABRT       6       Core    Abort signal from abort(3)
       SIGFPE        8       Core    Floating point exception
       SIGKILL       9       Term    Kill signal
       SIGSEGV      11       Core    Invalid memory reference
       SIGPIPE      13       Term    Broken pipe: write to pipe with no
                                     readers
       SIGALRM      14       Term    Timer signal from alarm(2)
       SIGTERM      15       Term    Termination signal
       SIGUSR1   30,10,16    Term    User-defined signal 1
       SIGUSR2   31,12,17    Term    User-defined signal 2
       SIGCHLD   20,17,18    Ign     Child stopped or terminated
       SIGCONT   19,18,25    Cont    Continue if stopped
       SIGSTOP   17,19,23    Stop    Stop process
       SIGTSTP   18,20,24    Stop    Stop typed at terminal
       SIGTTIN   21,21,26    Stop    Terminal input for background process
       SIGTTOU   22,22,27    Stop    Terminal output for background process

就像这样:
kill <signal> <pid>

一旦你有了核心,你就可以在 gdb 中打开符号文件。

你可以使用 generate-core-file gdb 中的命令生成正在运行的进程的核心转储。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top