debuggen: Kennt sich jemand mit GDB aus?

  • Hi,


    ich geh jetzt auch erstmal schlafen. Morgen zieh ich mir mal den Source vom Plugin rein.


    Gruss


    Macavity

    Capulet:
    HW: Dell Dimension 3100, Pentium 4 3GHz, 2GB RAM, 160GB HDD (System), 1TB HDD (Video), 1 x TT S2-1600, 1 x Technisat Skystar HD | SW: Debian 7.4, VDR 2.0.4 (selfcompiled), dummydevice 2.0.0, streamdev-server 0.6.1, NFS-Server


    TiViPi01:
    HW: Raspberry Pi Mod. B Rev. 2, 512MB RAM, 8GB SD-Card, Teko TEK-BERRY.9 Gehäuse, Ednet 85024 USB 2.0 Hub, Digitainer X10 Funk-Fernbedienung | SW: Raspbian 01/2014, VDR 2.0.4 (selfcompiled), rpihddevice 0.0.8, ffmpeg 1.0.8, streamdev-client 0.6.1, NFS-Client

  • was mir noch auffiel:
    Ist die Funktion PutData in der Klasse cPvrReadThread richtig angesiedelt? Beim pvrusb2-Plugin (dort heißt sie PutTSData) gehört sie zur Klasse
    des devices. Dort wird die Funktion auch zusätzlich abgebrochen, wenn der tsBuffer nicht mehr existiert

    VDR1: ACT-620, Asus P8B75-M LX, Intel Core i3-3240, 4 GB DDR3 RAM 1600 MHz, passive Geforce GT1030 von MSI, Sandisk 2TB SSD, 2xWinTV DualHD, Atric-IR-Einschalter. SW: Xubuntu 20.04 auf 64GB Sandisk SSD.

    VDR2: Odroid N2+ mit CoreELEC und Ubuntu in chroot, WinTV DualHD

    VDR3: Tanix TX3 mit CoreELEC und Ubuntu in chroot, WinTV DualHD

    Einmal editiert, zuletzt von Dr. Seltsam ()

  • Niemand anders als der Thread selbst gibt Daten in tsBuffer. Ich seh keinen Grund, warum das woanders hingehören sollte.


    Das mit dem Prüfen ob der Buffer existiert macht Sinn - aber nur wenn der Buffer vor dem Thread gelöscht werden kann.

  • so, wieder das ganze Wochenende gesucht und nichts gefunden ;(
    Meine Aussage, dass pvrinput mit vdr-1.5.11 noch einwandfrei läuft, ziehe ich zurück. Nach intensiven Tests musste ich auch dort feststellen, dass es beim Beenden sporadisch hängt.


    Mit vdr 1.4.7 ist hingegen alles o.k.

    VDR1: ACT-620, Asus P8B75-M LX, Intel Core i3-3240, 4 GB DDR3 RAM 1600 MHz, passive Geforce GT1030 von MSI, Sandisk 2TB SSD, 2xWinTV DualHD, Atric-IR-Einschalter. SW: Xubuntu 20.04 auf 64GB Sandisk SSD.

    VDR2: Odroid N2+ mit CoreELEC und Ubuntu in chroot, WinTV DualHD

    VDR3: Tanix TX3 mit CoreELEC und Ubuntu in chroot, WinTV DualHD

  • Da hilft wohl nur die Version 1.4.7 langsam auf die Version 1.5.11 hoch patchen bis
    der Fehler auftritt und den Quelltext der letzten Änderung würde ich dann gerne sehen.


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • ich bin mir inzwischen zu 99% sicher, dass der Ärger beim Wechsel von vdr 1.5.0 zu 1.5.1 anfing. Bisher habe ich es nicht geschafft, 1.5.0 beim Beenden aufzuhängen. Bei 1.5.1 geht das recht fix.


    In der 1.5.1 ist der shutdown-rewrite-Patch eingelossen:
    [ANNOUNCE] VDR developer version 1.5.1
    sollte der etwa schuld sein?

    VDR1: ACT-620, Asus P8B75-M LX, Intel Core i3-3240, 4 GB DDR3 RAM 1600 MHz, passive Geforce GT1030 von MSI, Sandisk 2TB SSD, 2xWinTV DualHD, Atric-IR-Einschalter. SW: Xubuntu 20.04 auf 64GB Sandisk SSD.

    VDR2: Odroid N2+ mit CoreELEC und Ubuntu in chroot, WinTV DualHD

    VDR3: Tanix TX3 mit CoreELEC und Ubuntu in chroot, WinTV DualHD

  • Mir fällt nicht wirklich was auf, aber kannst Du mal ein

    Code
    #include "shutdown.h"

    am Anfang von device.c des Plugins so unter die Zeile

    Code
    #include "setup.h"

    setzen und bei der Methode cPvrReadThread::Action(void) die Zeile

    Code
    while (active && Running()) {

    ersetzen durch

    Code
    while (active && !ShutdownHandler.DoExit()) {

    ?


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • Zitat

    Original von gda
    Mir fällt nicht wirklich was auf, aber kannst Du mal ein

    Code
    #include "shutdown.h"

    am Anfang von device.c des Plugins so unter die Zeile

    Code
    #include "setup.h"

    setzen


    hab da mal ein #include <vdr/shutdown.h> draus gemacht ;D


    Zitat

    und bei der Methode cPvrReadThread::Action(void) die Zeile

    Code
    while (active && Running()) {

    ersetzen durch

    Code
    while (active && !ShutdownHandler.DoExit()) {

    ?


    hängt leider gleich beim 2. Versuch

    VDR1: ACT-620, Asus P8B75-M LX, Intel Core i3-3240, 4 GB DDR3 RAM 1600 MHz, passive Geforce GT1030 von MSI, Sandisk 2TB SSD, 2xWinTV DualHD, Atric-IR-Einschalter. SW: Xubuntu 20.04 auf 64GB Sandisk SSD.

    VDR2: Odroid N2+ mit CoreELEC und Ubuntu in chroot, WinTV DualHD

    VDR3: Tanix TX3 mit CoreELEC und Ubuntu in chroot, WinTV DualHD

  • Zitat

    Original von Dr. Seltsam
    hab da mal ein #include <vdr/shutdown.h> draus gemacht ;D


    Dumm von mir, das Plugin sitzt ja nicht im selben Verzeichnis wie der
    vdr.

    Zitat

    Original von Dr. Seltsam
    hängt leider gleich beim 2. Versuch


    War auch blinder Aktionismus.


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • so, ich habe die letzten Tage alle Versionen des shutdown-rewrite-Patches durchgetestet und konnte eingrenzen, dass das Problem mit den Änderungen aus anhängendem Patch auftritt. Udo Richter gab mir dann den Tip, in vdr.c mal einen isyslog auszukommentieren ("Eigentlich sollte isyslog threadsafe sein, aber bei Signalhandlern weiß man ja nie...") :


    Seitdem klappte das Beenden bislang ohne Probleme. Wäre nett, wenn das noch ein paar mehr vdr-1.6/pvrinput-User austesten könnten.

    Dateien

    VDR1: ACT-620, Asus P8B75-M LX, Intel Core i3-3240, 4 GB DDR3 RAM 1600 MHz, passive Geforce GT1030 von MSI, Sandisk 2TB SSD, 2xWinTV DualHD, Atric-IR-Einschalter. SW: Xubuntu 20.04 auf 64GB Sandisk SSD.

    VDR2: Odroid N2+ mit CoreELEC und Ubuntu in chroot, WinTV DualHD

    VDR3: Tanix TX3 mit CoreELEC und Ubuntu in chroot, WinTV DualHD

  • Hallo zusammen,


    Zitat

    ("Eigentlich sollte isyslog threadsafe sein, aber bei Signalhandlern weiß man ja nie...") :


    ich habe (noch) keinen VDR laufen aber interessehalber mal die Quellen angeschaut.


    isyslog() wird in tools.h als syslog_with_tid() #define'd.
    syslog_with_tid() benutzt snprintf().


    Wenn ich mich richtig erinnere (von früher...) dann darf man in Signal Handlern keinen Speicher dynamisch allokieren (malloc()) weil das schief gehen kann, der Signal Handler kann von irgendwo her aufgerufen werden, z.B. auch aus *printf() oder ähnlich. Ich nehme mal an dass snprintf() typischerweise auch dynamisch Speicher allokiert. Damit hat das Ganze dann Potential zu crashen.


    Nur so als Vermutung...


    Viele Grüße,
    Bernd

    VDR "headless" Server:

    • Whitebox mit Supermicro X10SLL+-F, Xeon Prozessor, 16 GB RAM als ESXi Host, Debian VM für VDR, Digital Devices Cine S2 mit VT-d Passthrough an die VM
    • Debian, VDR 2.2 mit epgsearch, streamdev-server und live Plugins

    Client: Laptop, Windows und OS X, VLC Media Player

Jetzt mitmachen!

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