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

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


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

    Code
    1. 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.1 ~ DD Octopus NET V2 S2 Max - SAT>IP ~ LENOVO ThinkServer TS200V ~ Intel(R) Core(TM) i5 CPU680@3.60GHz ~ 6GB 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
    1. vdr ~ # ll /var/lib/vdr/core
    2. 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.1 ~ DD Octopus NET V2 S2 Max - SAT>IP ~ LENOVO ThinkServer TS200V ~ Intel(R) Core(TM) i5 CPU680@3.60GHz ~ 6GB 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.1 ~ DD Octopus NET V2 S2 Max - SAT>IP ~ LENOVO ThinkServer TS200V ~ Intel(R) Core(TM) i5 CPU680@3.60GHz ~ 6GB RAM ~ NVIDIA T400

    The post was edited 1 time, last by heifisch ().

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


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