Code will nicht ohne Debugging
-
Hallo Forum.
Ich hab da so ein Problem mit Visual Studio 2005.
Ich hab auf meinem Qt 4.1.2 eingerichtet und alles (nach anleitung) auch so in etwa zum laufen gebracht. ich kann nun auch toll Fenster und so weiter erzeugen, nun aber das problem.
möchte ich mein Programm vom explorer aus starten erscheint ein
"unhandled win32 exception occured in qtproj.exe [XXXX]" (XXXX ist irgendeine Zahl die ständig wechselt)
dann ploppt auch der JIT auf und zeigt auf folgenden fehler
"Unhandled exception at 0x0041260e in qtproj.exe: 0xC0000005: Access violation reading location 0x00000000."Ich finde es irgendwie merkwürdig daß er auf Adresse 0x00000000 zugreifen möchte. hab auch irgendwo gelesen, das visual studio mit 3rd party libs bockt.
kann mir jemend helfen? ... hilfe!!
danke im voraus
eviluser
-
Da solltest du dir den Code mal im Debugger ansehen (wenn du in dem "Unhandled Exception"-Dialog auf Wiederholen klickst, landest du bei der Anweisung, die die Fehler verursacht hast) - womöglich dereferenzierst du einen NULL-Pointer.
char* p=NULL; ... *p='a';(wenn dazwischen keine erfolgreiche Zuweisung an p kam, kracht's)
-
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)
-
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