[HOWTO] Coredump erzeugen und auswerten bei Abstürzen

  • Da es ja immer mal vorkommt dass ein Plugin abstürzt, und dann meist eine Einweisung erfolgt was denn zu tun ist, möchte ich die nötigen Schritte hier mal kurz zusammenfassen (Voraussetzung ist die Verfügbarkeit einer Build-Umgebung mit dem Debugger gdb). Falls es dazu schon einen allgemeinen Beitrag gibt möge man mich drauf hinweisen, ich habe nach umfangreicher Recherche nichts derartiges finden können.


    Methode 1: Ändern der runvdr
    Da es nicht immer einfach ist, VDR mit allen Plugins und Parametern "mal eben" von Hand zu starten, kann man auch die runvdr ändern, um die nötigen Voraussetzungen für das werfen eines sogenannten Coredumps zu schaffen. Hierzu muss zunächst mal die Zeile isoliert werden, in der VDR gestartet wird. In der Standard runvdr von kls ist das die Zeile 'eval "$VDRCMD"'. In hochgerüsteten runvdr's wird sie meist mit '$BINDIR/vdr' o.ä. eingeleitet. Vor dieser Zeile muss ein Kommando eingefügt werden, welches das System anweist bei Abstürzen ein komplettes Speicherabbild des Prozesses zu erzeugen. Man sollte auch in ein definiertes Verzeichnis wechseln, damit man die Datei später wiederfindet.

    Code
    cd /verzeichnis
    ulimit -c unlimited
    eval "$VDRCMD"


    Danach stoppt man die runvdr und startet sie neu (ein einfaches Abschiessen von VDR reicht nicht, da dann die runvdr nicht neu geladen wird). Wenn jetzt der Absturz provoziert wurde, sollte in dem entsprechenden Verzeichnis eine Datei namens core oder core.<Zahl> landen.


    Methode 2: Direktes Starten von VDR
    Hier reicht es, den o.g. Befehl 'ulimit -c unlimited' zu geben und dann VDR wie gewohnt von Hand zu starten. Nach Eintreten des Absturzes liegt dann die Datei core oder core.<Zahl> im aktuellen Verzeichnis.


    Auswertung:
    Jetzt startet man den Debugger gdb mit dem Pfad zum VDR und der erzeugten core-Datei als Parameter (am besten im Quellenverzeichnis vom VDR). Kurz darauf landet man bei einer Eingabeaufforderung des Debuggers. Dort gibt man den Befehl 'bt' und kopiert sich die daraufhin ausgegebenen Zeilen irgendwohin und schickt diese dem Entwickler.

    Code
    # gdb /pfad/zum/vdr core.<Zahl>
    ...
    #0  0xb7aa12b8 in ?? ()
    (gdb) bt
    ...Ausgabe...


    Sollten sich in der Ausgabe überwiegend Hexadezimalzahlen und Fragezeichen befinden, muss meist das verursachende Plugin mit einem Debug-Parameter kompiliert werden (bei meinen Plugins geht das zumeist über 'make DEBUG=1 clean-plugins plugins')

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!