是否可以获取gdb或使用其他工具来创建正在运行的进程的核心转储及其符号表?如果有办法在不终止流程的情况下做到这一点会很棒。
如果可以,您会使用哪些命令? (我试图在Linux机器上执行此操作)
答案 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
命令生成正在运行的进程的核心转储。