Qt, Visual Leak Detector, fmod - Tödliche Kombination?
-
Hallo.
Ich benutze die 3 Bibliotheken und habe festgestellt, dass sie sich irgendwie nicht vertragen. Das Problem ist, dass wenn ich diese 3 Sachen benutze ich eine Unbehandlete Ausnahme in der crtexe.c bekomme. An dieser Stelle:
if ( !managedapp ) exit(mainret); if (has_cctor == 0) // hier lande ich _cexit(); }
Das hier ist die main.cpp: (die ganze Umgebung ist von dem Visual Studio Addin erzeugt worden)
#include "vld.h" #include "qt_vld_fmod.h" #include <QtGui/QApplication> #include "fmod.hpp" class foo { public: foo (); ~foo (); private: FMOD::System* fmod_system_; }; foo::foo () { FMOD::System_Create ( &fmod_system_ ); fmod_system_->init(100, FMOD_INIT_NORMAL, 0); } foo::~foo () { fmod_system_->release (); } int main(int argc, char *argv[]) { QApplication a(argc, argv); qt_vld_fmod w; foo f; w.show(); return a.exec(); }
Wenn ich den Code hier kompiliere und ausführe, dann kriege ich den Fehler, wenn ich das Fenster mit dem Kreuz schliesse. Per Alt+F4 kommt der Fehler nicht.
Das witzige ist, dass sich das umgekhert, wenn ich kurz vor der main folgendes ändere:
/* hmm */ int main(int argc, char *argv[]) {
So, wie ich das sehe ist das undefiniertes Verhalten par excellence. Ich habe getestet und Vld + Qt habe ich das Problem nicht, Vld + fmod auch Ok, und fmod + Qt geht auch. Aber alle 3 zusammen erzeugen bei mir ein solch komisches verhalten. Ich habe da jetzt ca. 5 Stunden dran rumgeschlagen und komme auf keinen grünen Zweig, was da los ist.
Kenn das jemand oder weiss jemand gerade was dazu? - Ich bin mit meinem Latein am Ende.
Ich denke es wäre auch hilfreich, wenn jemand den Fehler ebenfalls reproduzieren könnte. (fmod und vld sind einfach zu installieren, falls das jemand noch nicht hat)
-
Echt niemand ne Idee?
Ich würd die Bibliotheken so eben schon recht gerne miteinander benutzen..
-
Trenne mal die Übersetzungseinheiten.
Fürs testen fehlt mir leider die Zeit, aber es klingt schon reichlich komisch
-
phlox81 schrieb:
Trenne mal die Übersetzungseinheiten.
Fürs testen fehlt mir leider die Zeit, aber es klingt schon reichlich komischDie waren mal getrennt, als ich den Fehler entdeckt habe. Habe es dann halt auf das hier reduziert.
Es ist halt einfach immer mal wieder typisch, dass ich solche Bugs nach Stundenlangem debuggen finden muss..
-
1. Die Platform ist Win32, oder ?
2. Welche Versionen ? QT3/4 ?wenn ich das Fenster mit dem Kreuz schliesse. Per Alt+F4 kommt der Fehler nicht.
Das witzige ist, dass sich das umgekhert, wenn ich kurz vor der main folgendes ändere:Tatsächlich unterscheidet sich Alt+F4 in der Funktionsweise von X-drücken.
Bei ALT-F4 gibts n KeyPressed-Event und QT erzeugt dann irgendwann ein closeEvent.
Bei X drücken kommt nur ein closeEvent und zwar vom Betriebssystem.Würde bedeuten der Fehler ist in QT zu suchen.
Lösung->
1. QT-Bugtracker nachschauen
2. Alle QT-Signals selbst abfangen und in den Handlern ein paar Debug-Nachrichten ausgeben.
-
nurf schrieb:
1. Die Platform ist Win32, oder ?
2. Welche Versionen ? QT3/4 ?wenn ich das Fenster mit dem Kreuz schliesse. Per Alt+F4 kommt der Fehler nicht.
Das witzige ist, dass sich das umgekhert, wenn ich kurz vor der main folgendes ändere:Tatsächlich unterscheidet sich Alt+F4 in der Funktionsweise von X-drücken.
Bei ALT-F4 gibts n KeyPressed-Event und QT erzeugt dann irgendwann ein closeEvent.
Bei X drücken kommt nur ein closeEvent und zwar vom Betriebssystem.Das ist mir schon klar. Aber das sollte ja keinen Unterschied für den Benutzer machen.
Würde bedeuten der Fehler ist in QT zu suchen.
Lösung->
1. QT-Bugtracker nachschauen
2. Alle QT-Signals selbst abfangen und in den Handlern ein paar Debug-Nachrichten ausgeben.Hmm. Ich habe im Moment ehrlichgesagt keine Lust Qt zu debuggen, aber naja werde ich wohl früher oder später mal noch machen.
Jap. Win32 (XP Prof., SP3) mit Qt 4.
Aber danke für die Tipps!