是否有可能获得正在运行的进程及其符号表的核心转储?

时间:2008-09-16 00:14:57

标签: debugging coredump

是否可以获取gdb或使用其他工具来创建正在运行的进程的核心转储及其符号表?如果有办法在不终止流程的情况下做到这一点会很棒。

如果可以,您会使用哪些命令? (我试图在Linux机器上执行此操作)

4 个答案:

答案 0 :(得分:65)

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

答案 1 :(得分:56)

或运行gcore $(pidof processname)

这有利于(运行gdb并向CLI发出命令)您可以在最短的时间内附加和分离。

答案 2 :(得分:1)

注意:以下方法将终止正在运行的进程&也需要符号。

您可以将以下信号之一(带有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中打开符号文件。

答案 3 :(得分:1)

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