[gelöst] Absturz im Debug Modus

Alles rund um die Programmierung mit Qt
Antworten
dave007as
Beiträge: 6
Registriert: 14. April 2007 13:13

[gelöst] Absturz im Debug Modus

Beitrag von dave007as »

Hallo,

ich habe folgendes Problem: Ich bin gerade dabei eine Qt Anwendung zu erstellen, die im Prinzip aus einem QMainWindow und zwei von QGLWidget abgeleiteten Viewer-Widgets besteht. Grundsätzlich läuft auch alles so, wie es soll, aber wenn ich unter Visual Studio 2005 die Anwendung im Debugger laufen lasse, stürzt das Programm immer dann ab, wenn ich ein Menü öffne und dieses eines der QGLWidgets verdeckt. Es liegt mit ziemlicher Sicherheit an meinen QGLWidgets, denn wenn ich die aus der Anwendung rausnehme, oder testweise durch andere ersetze, dann funktioniert alles und ich kann ordentlich debuggen. Selstsam ist halt, dass die debug-gebaute anwendung, wenn ich sie normal ausführe, funktioniert. Erst der Debugger von Visual Studio 2005 bringt dieses Problem zu Tage. Mittlerweile bin ich am Ende mit meinem Latein und weiss einfach nicht mehr weiter. Meine Debug Skills sind nicht die allerbesten, aber hoffe jemand aus diesem Forum kann mir da weiterhelfen. Hier erst mal der Backtrace:

msvcr80d.dll!fastzero_I(void * dst=0x00000c00, int len=3180) + 0x20 Bytes C
msvcr80d.dll!_VEC_memzero(void * dst=0x00000000, int val=3180, int len=1227276) + 0x36 Bytes C
QtGuid4.dll!gray_raster_new(void * memory=0x00000000, QT_FT_RasterRec_ * * araster=0x00000c00) Zeile 2047 + 0x10 Bytes C
msvcr80d.dll!_VEC_memzero(void * dst=0x00000000, int val=3180, int len=1227276) + 0x36 Bytes C
QtGuid4.dll!gray_raster_new(void * memory=0x00000000, QT_FT_RasterRec_ * * araster=0x00000000) Zeile 2047 + 0x10 Bytes C
QtGuid4.dll!gray_raster_new(void * memory=0x00000000, QT_FT_RasterRec_ * * araster=0x012f9708) Zeile 2047 + 0x10 Bytes C
QtGuid4.dll!QRasterPaintEngine::init() Zeile 611 + 0x12 Bytes C++
QtGuid4.dll!QRasterPaintEngine::QRasterPaintEngine() Zeile 586 C++
QtGuid4.dll!QRasterPaintDevice::QRasterPaintDevice() Zeile 43 + 0x49 Bytes C++
QtGuid4.dll!QRasterWindowSurfacePrivate::QRasterWindowSurfacePrivate() + 0xf Bytes C++
QtGuid4.dll!QRasterWindowSurface::QRasterWindowSurface(QWidget * window=0x012b4b88) Zeile 88 + 0x5f Bytes C++
QtGuid4.dll!qt_default_window_surface(QWidget * widget=0x012b4b88) Zeile 229 + 0x26 Bytes C++
QtGuid4.dll!QWidgetBackingStore::QWidgetBackingStore(QWidget * t=0x012b4b88) Zeile 315 + 0x9 Bytes C++
QtGuid4.dll!QWidget::create(HWND__ * window=0x00000000, bool initializeWindow=true, bool destroyOldWindow=true) Zeile 1061 + 0x26 Bytes C++
QtGuid4.dll!QWidget::setVisible(bool visible=true) Zeile 5163 C++
> QtGuid4.dll!QWidget::show() Zeile 417 + 0x16 Bytes C++
QtGuid4.dll!QAlphaWidget::run(int time=-1) Zeile 145 C++
QtGuid4.dll!qFadeEffect(QWidget * w=0x012f6278, int time=-1) Zeile 521 C++
QtGuid4.dll!QMenu::popup(const QPoint & p={...}, QAction * atAction=0x00000000) Zeile 1499 + 0xe Bytes C++
QtGuid4.dll!QMenuBarPrivate::popupAction(QAction * action=0x012f6618, bool activateFirst=false) Zeile 264 C++
QtGuid4.dll!QMenuBarPrivate::setCurrentAction(QAction * action=0x012f6618, bool popup=true, bool activateFirst=false) Zeile 299 C++
QtGuid4.dll!QMenuBar::mousePressEvent(QMouseEvent * e=0x0012c4b4) Zeile 909 C++
QtGuid4.dll!QWidget::event(QEvent * event=0x0012c4b4) Zeile 5695 C++
QtGuid4.dll!QMenuBar::event(QEvent * e=0x0012c4b4) Zeile 1275 C++
QtGuid4.dll!QApplicationPrivate::notify_helper(QObject * receiver=0x012ba9e0, QEvent * e=0x0012c4b4) Zeile 3434 + 0x11 Bytes C++
QtGuid4.dll!QApplication::notify(QObject * receiver=0x012ba9e0, QEvent * e=0x0012c4b4) Zeile 3133 + 0x2f Bytes C++
QtCored4.dll!QCoreApplication::sendSpontaneousEvent(QObject * receiver=0x012ba9e0, QEvent * event=0x0012c4b4) Zeile 186 + 0x40 Bytes C++
QtGuid4.dll!QETWidget::translateMouseEvent(const tagMSG & msg={...}) Zeile 2622 + 0x14 Bytes C++
QtGuid4.dll!QtWndProc(HWND__ * hwnd=0x00190a1e, unsigned int message=513, unsigned int wParam=1, long lParam=655447) Zeile 1278 + 0xc Bytes C++
user32.dll!7e368734()
[Unten angegebene Rahmen sind möglicherweise nicht korrekt und/oder fehlen, keine Symbole geladen für user32.dll]
user32.dll!7e368816()
user32.dll!7e3689cd()
user32.dll!7e368a10()
QtCored4.dll!QEventDispatcherWin32::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags={...}) Zeile 437 + 0x17 Bytes C++
QtGuid4.dll!QGuiEventDispatcherWin32::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags={...}) Zeile 930 + 0x15 Bytes C++
QtCored4.dll!QEventLoop::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags={...}) Zeile 127 C++
QtCored4.dll!QEventLoop::exec(QFlags<enum QEventLoop::ProcessEventsFlag> flags={...}) Zeile 172 + 0x2d Bytes C++
QtCored4.dll!QCoreApplication::exec() Zeile 727 + 0x15 Bytes C++
QtGuid4.dll!QApplication::exec() Zeile 2928 C++
Viewer3D.exe!main(int argc=1, char * * argv=0x00a76830) Zeile 10 + 0x8 Bytes C++
Viewer3D.exe!__tmainCRTStartup() Zeile 586 + 0x19 Bytes C
Viewer3D.exe!mainCRTStartup() Zeile 403 C
kernel32.dll!7c816fd7()


Auch wenn meine Erwartungen aus dieser Misere rauszukommen nicht allzu groß sind, die Hoffnung stirbt zuletzt.

Gruß,
Dave
Zuletzt geändert von dave007as am 15. April 2007 18:09, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Da hilft wohl nur ein Testcase - ein glwidget + menu - damit wir mal testen können ob es bei uns auch auftritt
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
dave007as
Beiträge: 6
Registriert: 14. April 2007 13:13

Beitrag von dave007as »

Generell scheint dieses Problem nicht aufzutreten. Das Austauschen meines QGLWidgets durch ein anderes bewirkt nämlich, dass der Fehler nicht mehr auftritt und das Testen mit anderen Qt Beispielen, z.B dem openGL/grabber, funktioniert auch. Mein erster Verdacht war, dass ich aus Versehen libs verwende, die unterschiedlich gebaut sind (debug, release), aber ich wüsste nicht welche...es handelt sich um ein recht großes Projekt, das teilweise auch nicht von mir selbst stammt, daher kann es gut sein, dass irgendwo etwas gemacht wird, was mit jetzt Probleme bereitet.
Interessant ist vielleicht noch, dass die Fehlermeldungen nicht immer unbedingt identisch sein. Das Öffnen meines File Menüs führt zu dem BT, den ich gepastet habe. Andere Menus scheinen an ganz anderer Stelle den Crash zu verursachen, wenn ich das richtig verstehe.
dave007as
Beiträge: 6
Registriert: 14. April 2007 13:13

Beitrag von dave007as »

Auch nochmal der Deutlichkeit halber: die debug gebaute Anwendung funktioniert, das Ausführen im Debugger crasht. Mir ist schon klar, dass das wahrscheinlich auf ein grundsätzliches Problem hindeutet und ich bislang lediglich Glück hatte, dass mir noch nicht alles um die Ohren geflogen ist.
dave007as
Beiträge: 6
Registriert: 14. April 2007 13:13

Beitrag von dave007as »

Puh, nach 4 deprimierenden Tagen habe ich nun endlich den Fehler alleine gefunden. Ein Teil der Klassen, die ich verwende, kapselt typische Szeneneigenschaften.
Die usprüngliche Intention dahinter war, den Code möglichst portabel zu halten und auch für andere graphische Benutzeroberlächen (z.B GLUT) leicht anpassen zu können. In einer dieser kapselnden Klassen fand ich nun mehrfach folgendes:

float *array = new float[4];
....
delete array;

Ein einfaches Abändern in delete[] array; hat das Problem behoben.
Das Problem lag also nicht bei Qt. Trotzdem muss man erst mal draufkommen...

Gruß,
Dave
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Also ein typischer c++ - Fehler :)
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten