C++ MFC Programm crasht beim beenden. Wie den Fehler finden ?

Paladin.de

Lt. Junior Grade
Registriert
Juli 2008
Beiträge
421
Ich habe ein relativ umfangreiches Programm in MFC erstellt, daher kann ich den QuellCode leider nicht posten.

Ich nutze Visual Studio 2005

Das Fenster habe ich mit Hilfe des Assistenten erstellt. (dialogfeld mit "OK" und "Abbrechen")

bis auf OnClose() wird nichts überladen. OnClose wird nur aufgerufen, wenn ich "X" betätige.

nun mein Problem: Das Programm stürzt beim beenden (durch "OK", "X" und "Abbrechen") ab. Der Fehler tritt nur im Release Modus auf. Ablauf ist: Programm starten, dann klick auf "X" zum beenden.

Auf meinem XP Rechner:

Wenn ichs in Visual Studio starte: kein fehler, springt einfach zurück auf die Entwicklungsumgebung

Wenn ichs außerhalb starte will direkt Visual Studio als debugger starten. Visual Studio zeigt entweder nix an (neue Instanz) oder die Stelle wo ich als letztes gearbeitet habe. Informationsgehalt: 0.

Ich lasse das Programm mit "Application Verifier" beobachten. dieses Meldet sich allerdings nicht, da Visual Studio als erstes aufgerufen wird. Im Log von dem Tool ist ncihts zu finden.

VM mit Windows XP: Windoof hat Fehler festgestellt: Bericht Senden/Nicht senden --> wieder keine Informationen was kaputt ist.

Windows 7 Rechner: scheint den Fehler einfach zu verschlucken (oder dort Funktioniert es).

Bisherige Schritte:

BreakPoint in OnCLose() : Das mitverfolgen des Programms war wenig erfolgreich. Das Programm verschwindet irgendwo in den Tiefen von WinCore.cpp und irgendwann kommt die Meldung "kein Quellcode für diese Stelle".

Auskommentieren sämtlicher variablen, die in OnInitDialog initialisiert werden: Leider auch keinen Erfolg. 99% der Variablen werden erst in verschiedenen Unterprogrammen angelegt, daher schließe ich hier die Fehlerquelle aus.

Nun die Fragen an die Community:

Gibts tools um da beenden des Programmes nachzuverfolgen (Funktionsaufrufe, bestehende Variablen etc.), um zu sehen was da nun buggt ?

Hat jemand vielleicht nen Tipp, wie man an die Fehlermeldung herankommen könnte, um zumindest nen kleinen Hinweis zu bekommen ?
 
du kannst auch mfc code "release" debuggen

Vermut emal du arbeitest mit Visual Studio:
in den Projektsettings unter C/C++ (Configuration auf Release stellen)
unter General Debug Information Format -> auf Program Database setzen
unter Optimization -> Optimization auf Disabled setzen

dann unterLinker
unter Debbuging -> Generate Debug info auch aktivieren...

dann kannst checken ob der Fehler überahupt noch vorkommt (wird er in den meisten fällen tun)
und dann kannst auch vernünftig debuggen

bezüglich kein Quellcode für diese Stelle:
du kannst die Microsoft Symbols runterladen, ganz offiziell und legal und zwar von
http://msdn.microsoft.com/en-us/windows/hardware/gg463028
bzw. wenn du eh dauernd internet zugang hast, ist es einfacher den link zu setzen
wie das geht für VS 2005 siehst du hier
http://geekswithblogs.net/sdorman/a...-Visual-Studio-2005-with-a-Symbol-Server.aspx
es gibt aber sicherlich auch anleitungen für die anderen versionen von VS
 
Wenn es schon beim blossen öffnen/schliessen Probleme gibt könntest Du aus dem Code alles andere entfernen (auskommentieren), bis das Problem nicht mehr auftritt.

Es gibt bei Debug <-> Release einen unterschiedlichen Stackaufbau, ohne Debug-Umgebung oder bei .NET 2.0 wird immer Frame Pointer Ommision verwendet, falls Du also irgendwas am Stack machst liegt es evtl. daran.
 
Zurück
Oben