[MSVS 2005] Release-Version <-> Debug-Version
-
Hallo allerseits.
Folgendes Problem:
Die Release-Version eines Programmes funktioniert und läuft, sowohl aus VS gestartet als auch aus dem Explorer oder Commandline. Dagegen crasht die Debug-Version, mit einer "Access Violation Exception", deren genauen Ursprung ich noch nicht kenne, allerdings gerade suche.Woran kann es liegen, dass der Release-Modus ohne Probleme und Exceptions funktioniert, aber das Programm nicht mehr debugged werden kann?
Welche Unterschiede zwischen Debug und Release könnten hierfür verantwortlich sein?Gruß
Martin
-
Im Debug-Mode werden Variablen mit einem festen Wert vorbelegt.
Dieser Umstand fällt in der Release Version weg. Dies kann dazu führen, dass die Release Version läuft, weil der Wert derzufällig irgendwo in der Variablen steht nicht schlimm ist, während der Wert der in der Debug-Version in der Variablen steht "böse" ist.Zudem kann es sein, dass Du Dich auf Abhängigkeiten der Initialisierung von Variablen verlässt, die in Debug/Release Version unterschiedlich ist.
Siehe auch:
http://blog.m-ri.de/index.php/2008/11/04/vs-tipps-tricks-heap-bugs-finden-teil-3/
-
Sehr hilfreicher Artikel. Es scheint also ein Problem zu sein, dass nur beim Debug-Heap auftritt, ohne nicht. Habe es mittels nachträglichem Attach überprüft, das Programm läuft nun auch im Debugger ohne Probleme.
Scheint es also jetzt ein korrupter Heap zu sein, der erst beim Debug-Heap wirklich auffällt?
Das wird spannend. Wie findet man sowas sinnvoll?
-
Teil 1+2 gelesen?
http://blog.m-ri.de/index.php/2008/10/27/vs-tipps-tricks-heap-bugs-finden-teil-1/
http://blog.m-ri.de/index.php/2008/10/31/vs-tipps-tricks-heap-bugs-finden-teil-2/Wenn es ein wilder Pointer ist, solltest Du einfach mal den Stacktrace ansehen wenn es kracht.
-
Ok, gelöst. Copyctor und Pointer können zusammen viel Mist erzeugen.
Danke nochmal und auch für den Tip mit dem Application Verifier. Der kann schon was!