Code will nicht ohne Debugging



  • VC nimmt dir in der Debugversion einige Initialisierungsarbeiten ab, vielleicht macht es das ja auch bei QT-Programmen.
    Dann hilft vielleicht: http://www.codeproject.com/debug/survivereleasever.asp 🙂



  • Hallo.
    Ich hab alle compiler optimierungen usw ausgeschalten und probiert. gleiches Problem.
    der debugger von vs2005 leitet mich außerdem auf irgend eine source von qt und sagt da is das problem (keine ahnung).

    ich kann eigenartiger weise debug und release modus kompilieren und auch ausführen. aber nur von visual studio aus. sobald ich die datei im explorer ausführe gibt es diesen fehler.

    (auch wenn ich über "Debug->Start without debugging CTRL+F5" gehe)


  • Mod

    Erzeuge auch den Release Build mit Debug Infos! Entsprechende Einstellungenj sind für die Compiler und Linker Optionen zu machen.
    Dann kannst Du auch gut im Release Mode debuggen und den Bug suchen.



  • Ich hab gerade an den Einstellungen rumgespielt und habs zumindest im debug modus zum laufen bekommen

    scheinbar gibts probleme wenn ich

    C/C++ -> Code Generation -> Runtime Libary
    auf "Multi-threaded (/MT)"

    stelle. Stelle ich auf:

    "Multi-threaded Debug (/MTd)"

    läuft der Code auch ohne VS. ?!?
    eigenartig.
    wird mein programm dadurch nun langsamer?



  • wird mein programm dadurch nun langsamer?

    Ja, auch.
    Und du darfst Debugversionen nicht weitergeben, also nicht verkaufen oder verschenken.



  • Grandios...

    und wieso läuft mein programm dann nur im debug modus und nicht normal?!?
    irgendwie raff ich das nicht!!

    die zeile zu der er im JIT springt ist folgender

    //-----------------------------------------------------
    #if defined(QT_NO_EXCEPTIONS)
            c.receiver->qt_metacall(QMetaObject::InvokeMetaMethod, method, argv ? argv : empty_argv);
    #else
            try {
    ->            c.receiver->qt_metacall(QMetaObject::InvokeMetaMethod, method, argv ? argv : empty_argv);
            } catch (...) {
                list->lock.lockForRead();
                if (c.receiver)
                    c.receiver->d_func()->currentSender = previousSender;
                throw;
            }
    #endif
    //-----------------------------------------------------
    

    da soll ein zugriff auf 0x0000000 kommen.
    die variablen argv und empty_argv haben diesen Wert aber was mach ich mit dieser information?!?



  • Interessant wäre auch c.receiver, denn das ist ein Zeiger, auf den du in der Zeile zugreifst.
    Ist das dein Code oder der von QT?



  • Der Code ist von QT.

    > QtCored4.dll!QMetaObject::activate(QObject * sender=0x003f27d8, int from_signal_index=4, int to_signal_index=4, void * * argv=0x00000000) Line 2678 + 0x43 bytes C++
    QtCored4.dll!QMetaObject::activate(QObject * sender=0x003f27d8, const QMetaObject * m=0x67154670, int local_signal_index=0, void * * argv=0x00000000) Line 2716 + 0x1b bytes C++
    ....
    > QtCored4.dll!QCoreApplication::sendEvent(QObject * receiver=0x003e9dc0, QEvent * event=0x00a42570) Line 171 + 0x46 bytes C++

    > QtCored4.dll!QCoreApplication::sendPostedEvents(QObject * receiver=0x00000000, int event_type=0) Line 974 + 0xd bytes C++

    Is ne üble sache keine Ahnung zu haben... 😞



  • Da solltest du mal im Callstack zurückverfolgen, von wo aus der Parameter "reciever" der SendPostedEvents()-Methode mit Werten gefüllt wird.

    PS: Und wenn du Probleme mit QT hast, solltest du dich mal im "andere GUIs" Board umhören.



  • Zum Thema Callstack usw. kannst du dir ja meinen Artikel zum Debuggen mit VC6 mal angucken. 🙂
    Da ist erklärt, wo du den findest und wie man damit umgehen muss.
    In VC2005 ist zwar alles etwas anders, aber du solltst es wiederfinden. (Sonst frag, ich hab beide und suchs raus.)



  • Vielen Dank für Eure Hilfe 🙂

    Ich hab endlich die lösung gefunden. Menschliche Dummheit 🙂

    Ich hab ein feld Angelegt und direkt auf die werte darin zugegriffen, ohne vorher alles auf 0 zu setzen. im debug modus wirds scheinbar gleich mit nullen initalisiert. im release mode scheinbar nicht .

    is blöd das so ein fehler einen tage lang aufhalten kann.

    mal sehn wie es weiter geht 🙂

    gruß
    eviluser


Anmelden zum Antworten