关于调试:是否可以获取正在运行的进程及其符号表的核心转储?

关于调试:是否可以获取正在运行的进程及其符号表的核心转储?

Is it possible to get a core dump of a running process and its symbol table?

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

如果可能,您将使用哪些命令? (我正在尝试在Linux机器上执行此操作)


1
2
3
4
$ gdb --pid=26426
(gdb) gcore
Saved corefile core.26426
(gdb) detach

或运行gcore $(pidof processname)

这样的好处(通过运行gdb和向CLI发送命令)可以在最短的时间内附加和分离。


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


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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
       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

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


推荐阅读