Programm stürzt regelmäßig ab

Alles rund um die Programmierung mit Qt
Antworten
reinki0013
Beiträge: 174
Registriert: 11. November 2008 09:37
Wohnort: AUT

Programm stürzt regelmäßig ab

Beitrag von reinki0013 »

Hallo zusammen,

ich habe ein Programm, welches mit Threads arbeitet.
In der Debug Version funktioniert es sehr gut, stürzt nicht ab - sobald ich das Release am Device laufen lasse stürzt es in einer Tour ab.

Das Device ist ein Microcontroller, wo ein Linux (Debian) läuft.

Ich habe jetzt mal mit dem GDB-Debugger folgendes herausgefunden:

Code: Alles auswählen

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x4178a460 (LWP 534)]
0x4015dd7c in QNetworkInterface::QNetworkInterface(QNetworkInterface const&) ()
   from /usr/local/packages/qt-armel-qvfb-4.7.1/lib/libQtNetwork.so.4
(gdb) bt
#0  0x4015dd7c in QNetworkInterface::QNetworkInterface(QNetworkInterface const&) ()
   from /usr/local/packages/qt-armel-qvfb-4.7.1/lib/libQtNetwork.so.4
#1  0x0003a350 in cNetworkThread::run() ()
#2  0x40222b90 in ?? () from /usr/local/packages/qt-armel-qvfb-4.7.1/lib/libQtCore.so.4
#3  0x40222b90 in ?? () from /usr/local/packages/qt-armel-qvfb-4.7.1/lib/libQtCore.so.4
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
(gdb) info frame
Stack level 0, frame at 0x41789c48:
 pc = 0x4015dd7c in QNetworkInterface::QNetworkInterface(QNetworkInterface const&);
    saved pc 0x3a350
 called by frame at 0x41789ca8
 Arglist at 0x41789c38, args:
 Locals at 0x41789c38, Previous frame's sp is 0x41789c48
 Saved registers:
  r4 at 0x41789c38, r5 at 0x41789c3c, r6 at 0x41789c40, lr at 0x41789c44
(gdb) info stack
#0  0x4015dd7c in QNetworkInterface::QNetworkInterface(QNetworkInterface const&) ()
   from /usr/local/packages/qt-armel-qvfb-4.7.1/lib/libQtNetwork.so.4
#1  0x0003a350 in cNetworkThread::run() ()
#2  0x40222b90 in ?? () from /usr/local/packages/qt-armel-qvfb-4.7.1/lib/libQtCore.so.4
#3  0x40222b90 in ?? () from /usr/local/packages/qt-armel-qvfb-4.7.1/lib/libQtCore.so.4
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
(gdb) info bt
Undefined info command: "bt".  Try "help info".
(gdb) bt
#0  0x4015dd7c in QNetworkInterface::QNetworkInterface(QNetworkInterface const&) ()
   from /usr/local/packages/qt-armel-qvfb-4.7.1/lib/libQtNetwork.so.4
#1  0x0003a350 in cNetworkThread::run() ()
#2  0x40222b90 in ?? () from /usr/local/packages/qt-armel-qvfb-4.7.1/lib/libQtCore.so.4
#3  0x40222b90 in ?? () from /usr/local/packages/qt-armel-qvfb-4.7.1/lib/libQtCore.so.4
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
Hierzu meine Klasse cNetworkThread.h:

Code: Alles auswählen

#ifndef CNETWORKTHREAD_H
#define CNETWORKTHREAD_H

#include <QThread>
#include <cLedState.h>

class cNetworkThread : public QThread
{
  Q_OBJECT

public:

  explicit cNetworkThread(QObject *parent = 0);
  void run();
       
public slots:
    
};

#endif // CNETWORKTHREAD_H
und meine .cpp-Datei dazu:

Code: Alles auswählen

#include "cNetworkThread.h"
#include <QNetworkInterface>
#include <QHostAddress>
//#include <cDatabase.h>


cNetworkThread::cNetworkThread(QObject *parent) :
    QThread(parent)
{
  qDebug() << "Network-Thread Konstruktor";
  qDebug() << "Network-Thread ID" << currentThreadId();
}

void cNetworkThread::run()
{
    qDebug() << "Network-Thread run-Methode" << currentThreadId();
    while(true)
    {
        msleep(200);
        QList<QNetworkInterface> ifaces = QNetworkInterface::allInterfaces();

        for(int i = 0; i < ifaces.count(); i++)
        {
            msleep(200);
            QNetworkInterface iface = ifaces.at(i);
            QString interfaceName = ifaces[i].name();
            if(interfaceName == "eth0")
            {
                if(iface.flags().testFlag(QNetworkInterface::IsRunning) && !iface.flags().testFlag(QNetworkInterface::IsLoopBack))
                {
                    // Verbindung vorhanden
                }
                else
                {
                    //qDebug() << "Verbindung getrennt";
                    cLedState::SetLED(LED_NETWORK);
                }
            }
        }
        ifaces.clear();
    }
}
Ich habe allerdings überhaupt keinen Plan warum und wieso?!
Könnt ihr mir da weiterhelfen?

Lg
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Programm stürzt regelmäßig ab

Beitrag von franzf »

gdb gibt doch nen Hinweis: Stack zerschossen.
Kann ganz leicht passieren wenn man mit mehreren Threads arbeitet aber nicht aufpasst, wer wann schreibt (Stichwort locking).
reinki0013
Beiträge: 174
Registriert: 11. November 2008 09:37
Wohnort: AUT

Re: Programm stürzt regelmäßig ab

Beitrag von reinki0013 »

franzf hat geschrieben:gdb gibt doch nen Hinweis: Stack zerschossen.
Kann ganz leicht passieren wenn man mit mehreren Threads arbeitet aber nicht aufpasst, wer wann schreibt (Stichwort locking).
also ich hab jetzt mal alles auskommentiert in der cNetworkThread-Klasse was auf einen anderen Thread zugreift. Somit läuft dieser jetzt vollständig unabhängig und sollte keine Fehler mehr machen, oder ?!

Wie könnte ich über GDB herausfinden wo der Fehler genau ist (Variable, Speicherplatz, etc.)?

LG
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Programm stürzt regelmäßig ab

Beitrag von franzf »

Ich weiß nicht ob gdb das kann (wohl eher nicht), aber dafür gibt es valgrind. Frag mal $(suchmaschine) nach "valgrind memory corruption", da gibt es einige Artikel, die dich sicher weiterbringen.
(valgrind sollte eigentlich Pflicht sein ;))
reinki0013
Beiträge: 174
Registriert: 11. November 2008 09:37
Wohnort: AUT

Re: Programm stürzt regelmäßig ab

Beitrag von reinki0013 »

franzf hat geschrieben:Ich weiß nicht ob gdb das kann (wohl eher nicht), aber dafür gibt es valgrind. Frag mal $(suchmaschine) nach "valgrind memory corruption", da gibt es einige Artikel, die dich sicher weiterbringen.
(valgrind sollte eigentlich Pflicht sein ;))
ja also mit dem valgrind ist das so eine sache - in unserer vm-ware läuft das valgrind aber auf dem device (armel) kann ich dieses programm nicht installieren (gibts nicht unter armel / debian squeeze)...
reinki0013
Beiträge: 174
Registriert: 11. November 2008 09:37
Wohnort: AUT

Re: Programm stürzt regelmäßig ab

Beitrag von reinki0013 »

reinki0013 hat geschrieben:
franzf hat geschrieben:Ich weiß nicht ob gdb das kann (wohl eher nicht), aber dafür gibt es valgrind. Frag mal $(suchmaschine) nach "valgrind memory corruption", da gibt es einige Artikel, die dich sicher weiterbringen.
(valgrind sollte eigentlich Pflicht sein ;))
ja also mit dem valgrind ist das so eine sache - in unserer vm-ware läuft das valgrind aber auf dem device (armel) kann ich dieses programm nicht installieren (gibts nicht unter armel / debian squeeze)...
also mit unserem Prozessor der auf unserem Device läuft funktioniert "valgrind" definitiv nicht (ARM926EJ-S rev5 (v51)).
ich weiß das es sicher ein Thread übergreifendes problem ist, wir wissen allerdings überhaupt nicht wie wir da weiter vorgehen sollen...
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Programm stürzt regelmäßig ab

Beitrag von franzf »

Wie kommst du darauf, dass es auf deinem ARM nicht geht? Welche Version hast du ausprobiert? Kannst du einfach mal nen aktuellen checkout aus dem svn probieren? (War für mich bis vor kurzem auch notwendig, um support für meinen i7 zu bekommen, da valgrind AVX &co erst spät gelernt hat - valgrind-3.8.0 geht aber jetzt :))
reinki0013
Beiträge: 174
Registriert: 11. November 2008 09:37
Wohnort: AUT

Re: Programm stürzt regelmäßig ab

Beitrag von reinki0013 »

franzf hat geschrieben:Wie kommst du darauf, dass es auf deinem ARM nicht geht? Welche Version hast du ausprobiert? Kannst du einfach mal nen aktuellen checkout aus dem svn probieren? (War für mich bis vor kurzem auch notwendig, um support für meinen i7 zu bekommen, da valgrind AVX &co erst spät gelernt hat - valgrind-3.8.0 geht aber jetzt :))
guten morgen,

ja also ich habe deinen rat befolgt und die aktuelle 3.8.1 auf mein device geladen und mittels "./configure" einrichten lassen.
allerdings (wie von mir schon gesagt das es mit meinem ARM5 nicht geht) kam folgende fehlermeldung:

Code: Alles auswählen

checking for a supported CPU... no (armv5tejl)
configure: error: Unsupported host architecture. Sorry
somit steht fest, mit valgrind habe ich keinerlei chance...
hast du noch eine andere idee? oder wie könnte ich da jetzt am besten weiter vorgehen?

lg
Antworten