web-dev-qa-db-fra.com

Est-il possible d'obtenir un dump central d'un processus en cours d'exécution et de sa table de symboles?

Est-il possible d’obtenir gdb ou d’utiliser d’autres outils pour créer un dump central d’un processus en cours d’exécution et de sa table des symboles? Ce serait bien s'il y avait un moyen de faire cela sans mettre fin au processus. 

Si cela est possible, quelles commandes utiliseriez-vous? (J'essaie de faire cela sur une machine Linux)

50
Readonly
 $ gdb --pid = 26426 
 (gdb) gcore 
 Corefile enregistré core.26426 
 (gdb) detach 
60
DustinB

Ou exécutez gcore $(pidof processname).

Cela présente l'avantage (par rapport à l'exécution de gdb et à l'envoi de commandes à la CLI) que vous attachez et détachez le plus rapidement possible. 

51
Alex Zeffertt

Vous pouvez utiliser la commande generate-core-file dans gdb pour générer le dump principal du processus en cours.

0
Dev

Remarque: La méthode suivante met fin au processus en cours et requiert également les symboles.

Vous pouvez envoyer l'un des signaux suivants (avec action = core) au processus en cours d'exécution:
De: 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

Ainsi:
kill <signal> <pid>

Et une fois que vous avez le noyau, vous pouvez ouvrir gdb avec le fichier de symboles.

0
brokenfoot