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?)
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
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();
}
}
Könnt ihr mir da weiterhelfen?
Lg