题
是否可以获取 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 中的命令生成正在运行的进程的核心转储。
不隶属于 StackOverflow