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
#!/sbin/openrc-run
command=/usr/bin/screen
command_args="-dmS gdb-vdr /usr/local/bin/gdb-vdr"
pidfile=/var/run/screen-gdb-vdr.pid
name="gdb-vdr Screen Session"
depend() {
# (Dependency information)
need vdr
}
stop() {
# (Commands necessary to stop the service)
kill $(pgrep -f "gdb -iex set pagination off -q -ex cont -p")
}
Alles anzeigen
vdr ~ # cat /usr/local/bin/gdb-vdr
#!/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.
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...