Erzeugung von core dump erzwingen trotz eigenem SIGSEGV handler

By dose | February 11, 2009
Under: technical stuff, Uncategorized

Ein Problem mit Programmen ist, dass diese immer mal wieder abstürzen. Der Kunde mault, der Entwickler ist ratlos wie es dazu gekommen ist. Um post-mortem noch etwas über den Crash der Applikation feststellen zu können, gibt es unter *nix coredump-files.
Nun kann man mit ulimit -c unlimited die Erstellung dieser coredump zwar einschalten, aber das nützt nix, wenn man einen eigenen Signal handler für SIGSEGV hat, in dem man z.B. einen Stacktrace generieren und in ein Logfile zur Schnellanalyse schreiben kann.
Zufällig bin ich auf einen Mailinglisteneintrag gestoßen, wo erklärt wird, wie man den Signalhandler so setzt, dass trotzdem noch ein Stacktrace generiert wird. Prinzipiell muss man mit sigaction mithilfe des Flags SA_RESETHAND einstellen, dass der Signal-handler selbst auch wieder ein signal absetzen darf und im Signal-handler dann mit raise das Signal nochmals senden, sodass der Kernel den Coredump produziert.

Ich habe den Code noch etwas erweitert, um z.B. die Erstellung eines Coredumps trotz ulimit -c 0 zu ermöglichen
und in meinem Signal handler gibt’s einen Stracktrace auf stderr.
Den Beispielcode findet man hier

Das weitere Debuggen des coredumps sollte dann ohnehin bekannt sein:
gdb [executable] [coredump]
thread apply all bt

4 comments | Add One

Comments

  1. mist - 08/19/2010 at 18:43

    Hi,

    da dump.at jetzt schon länger down ist, komme ich nicht an den Beispielcode.
    Wäre es möglich, den noch irgendwo anders hochzuladen?

    Danke!

  2. Ash - 09/1/2010 at 11:31

    Moin. Leider ist das Link zum Beispielcode down – der hätte mich jetzt unheimlich interessiert.
    Gibts eine Möglichkeit den anderweitig zu kriegen?

  3. dose - 09/2/2010 at 19:52

    ist wieder online.

  4. dose - 09/2/2010 at 19:52

    code.dump.at wieder online. Sorry für downtime.

Trackbacks

Leave a Comment

Name:

E-Mail :

Subscribe :
Website :

Comments :