È possibile ottenere un core dump di un processo in esecuzione e la sua tabella dei simboli?
Domanda
È possibile ottenere gdb o utilizzare altri strumenti per creare un core dump di un processo in esecuzione e la sua tabella dei simboli?Sarebbe fantastico se ci fosse un modo per farlo senza interrompere il processo.
Se ciò fosse possibile, quali comandi utilizzeresti?(Sto provando a farlo su una macchina Linux)
Soluzione
$ gdb --pid=26426 (gdb) gcore Saved corefile core.26426 (gdb) detach
Altri suggerimenti
Oppure corri gcore $(pidof processname)
.
Questo ha il vantaggio (rispetto all'esecuzione di gdb e all'invio di comandi alla CLI) di collegare e scollegare nel più breve tempo possibile.
Nota: Il seguente metodo terminerà il processo in esecuzione e richiederà anche i simboli.
Puoi inviare uno dei seguenti segnali (con action=core) al processo in esecuzione:
Da: 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
Così:
kill <signal> <pid>
E una volta ottenuto il core, puoi aprirlo in gdb insieme al file dei simboli.
Puoi usato generate-core-file
comando in gdb per generare core dump del processo in esecuzione.