Auf der Jagd nach Segfaults

  • Hallo.


    Da ich in der Vergangenheit immer mal einen Segfault hatte, es aber dann nie geschafft habe, wenn gdb lief, diesen zu reproduzieren, habe ich mal geschaut, ob man gdb generell laufen lassen könnte.


    Bei meinen Experimenten bin ich bei folgender Lösung gelandet:

    Umgebung: Gentoo

    Init-System: openrc


    Ich habe mir ein init-Script geschrieben in dem nach dem VDR-Start, eine screen-Sitzung (detached) mit der Ausführung eines Scriptes gestartet wird.

    Das Script startet dann gdb.

    Im Falle eines Segfaults, kann man dann in die Screen-Sitzung wechseln und bt aufrufen.


    vdr ~ # cat /etc/init.d/gdb-vdr


    vdr ~ # cat /usr/local/bin/gdb-vdr

    Bash
    #!/bin/bash
    
    screen -ls | grep -oE "[0-9]+\.gdb-vdr" | sed -e "s/\..*$//g" > /var/run/screen-gdb-vdr.pid;
    
    gdb -iex "set pagination off" -q -ex cont -p $(pidof vdr);


    Mit folgenden Befehl, kann man dann in die Screen-Sitzung wechseln.

    Code
    vdr ~ # screen -x gdb-vdr



    Schönheitsfehler: Wenn ein Segfault auftritt während noch Aufnahmen anstehen, hängt der VDR und der Watchdog startet ihn auch nicht neu.

    Also leider dann doch nicht für den Dauereinsatz geeignet... Aber zum Testen ist es vielleicht ganz brauchbar...

    Gentoo Linux ~ VDR 2.6.6 ~ DD Octopus NET V2 S2 Max - SAT>IP ~ LENOVO ThinkServer TS200V ~ Intel(R) Core(TM) i5 CPU680@3.60GHz ~ 16GB RAM ~ NVIDIA T400

  • Warum so kompliziert? Einfach einen core schreiben lassen und in gdb öffnen..

  • Leider bekomme da nicht viel raus.

    Das hängt hier und ich kann nichts machen:



    Das core-File sollte zumindest von der Zeit des Segfaults her passen:


    Code
    vdr ~ # ll /var/lib/vdr/core
    48463491 446548 -rw------- 1 root root 1191378944 31. Aug 21:37 /var/lib/vdr/core


    Naja, muss noch mal bissel forschen...

    Gentoo Linux ~ VDR 2.6.6 ~ DD Octopus NET V2 S2 Max - SAT>IP ~ LENOVO ThinkServer TS200V ~ Intel(R) Core(TM) i5 CPU680@3.60GHz ~ 16GB RAM ~ NVIDIA T400

  • Ich denke ich muss mir erst mal das genau durchlesen:


    http://www.gentooforum.de/arti…re-dump-file-analyse.html


    Aber ich sehe nicht wirklich, dass das Handling einfacher wird, als mit der Lösung von oben...

    Gentoo Linux ~ VDR 2.6.6 ~ DD Octopus NET V2 S2 Max - SAT>IP ~ LENOVO ThinkServer TS200V ~ Intel(R) Core(TM) i5 CPU680@3.60GHz ~ 16GB RAM ~ NVIDIA T400

    Einmal editiert, zuletzt von heifisch ()

  • Du brauchst keinen extra Prozess, kein Startscript, nix. Nur gdb und den Kernel.


    https://www.brendangregg.com/b…/gdb-example-ncurses.html

Jetzt mitmachen!

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