2014-12-21 12 views
19

Unter Linux, wenn ein Prozess abstürzt, wird ein Core-Dump erstellt.Wie erstellt man einen Core-Dump, auch wenn der Prozess normalerweise ausgeführt wird?

Allerdings möchte ich einen Core Dump erstellen, wenn der Prozess nicht abstürzt, aber sieht fehlerhaft aus. Ein Remote-Experte benötigt den zu analysierenden Core-Dump.

Unter Windows können wir eine Dump-Datei eines Prozesses über Task-Manager erstellen und danach wird der Prozess noch ausgeführt.

Ist es unter Linux möglich?

Antwort

20

Anruf gdb, dann

attach pid 
gcore 

wo pid die ID des Prozesses in Frage Prozess.

9

Wenn Sie dies programmgesteuert durchführen möchten, versuchen Sie es mit google-coredumper. Ihr Beispiel:

#include <google/coredumper.h> 
... 
WriteCoreDump('core.myprogram'); 
/* Keep going, we generated a core file, 
* but we didn't crash. 
*/ 
14

Sie können es in Ihrem Code tun mit:

if (fork() == 0) abort(); 
+5

Dies ist wahrscheinlich nicht die beste Lösung, aber Junge ist es schlau :) –

17

Sie können gcore Dienstprogramm direkt von der Kommandozeile:

gcore [-o filename] pid 

By the way, wenn Sie wollen um nur Stack-Trace des Prozesses zu sehen, gstack Dienstprogramm wird die Aufgabe erledigen.

Beide Dienstprogramme werden mit gdb geliefert.