Wie erzeuge ich gezielt einen Core-Dump (weil das Programm hängt)?
-
Hallo zusammen,
ich wollte mal fragen, ob und wie ich unter Linux gezielt einen Core-Dump eines Programms erzeugen kann, daß anscheinend "hängt".
Daß Programm ist eine Debug-Version (g++ -g -o) für den GDB. Die Fehler in zwei anderen Programmen haben wir beheben können, weil die Programme mit einem segfault abgeschmiert sind ("ulimit -c unlimited" wurde aufgerufen) und core-Dateien erzeugt haben, die wir im gdb geladen haben.
Das dritte Programm scheint in einer Endlos-Schleife oder einem Deadlock gefangen zu sein.
Das Problem tritt allerdings nicht bei uns, sondern bei einem Kunden auf, und auch dort erst nach mehreren Tagen. Die Auswirkungen eines Absturzes SIND durchaus ziemlich dramatisch, also suchen wir einen Weg, die Anwendung gezielt zu dumpen, damit wir sie uns im GDB ansehen können.
Für Tipps wäre ich dankbar.
MfG
Sid
-
Du könntest einfach das Signal SIGABRT an den Prozess schicken, wenn die ulimits richtig gesetzt sind erzeugt er dabei ein Corefile als würdest Du die Anwendung von innen mit abort() beenden.
SIGSEGV oder SIGILL oder SIGFPE würden auch noch gehen, aber Abort scheint mir dem Zweck am angemessensten.
EDIT:
kill -ABRT $( ps -ef | grep MY_APP | grep -v grep | awk '{ print $2 }')
-
Wozu eigentlich eine Core Datei? Es ist doch viel besser sich direkt an den Prozess anzuhängen, dann sind auf jeden Fall noch alle Informationen vorhanden:
gdb -p PID
-
Ginge auch, aber da der OP schrieb dass es nur beim Kunden passiert habe ich die Möglichkeit mal ausgeschlossen
-
Vielleicht gehts jetzt...
Vielen Dank für die Informationen. Der Dump wird ohnehin vor Ort untersucht, da die Firewalls des Kunden wohl kaum für ein Remote-Debugging geöffnet würden...
MfG
Sid
-
Vielleicht hilft ja Google Coredumper weiter: http://goog-coredumper.sourceforge.net/