Freigeben über


Häufig auftretende Probleme beim Erstellen eines Releasebuilds

Während der Entwicklung werden Sie zum Erstellen und Testen in der Regel ein Debugbuild des Projekts verwenden. Wenn Sie dann die Anwendung in ein Releasebuild umwandeln, kann u. U. eine Zugriffsverletzung auftreten.

In der nachfolgenden Liste sind die Hauptunterschiede zwischen einem Debugbuild und einem Releasebuild aufgeführt. Obwohl es noch mehr Unterschiede gibt, sind im Folgenden die Hauptunterschiede aufgelistet, die dazu führen können, dass eine Anwendung im Releasebuild fehlschlägt, obwohl sie im Debugbuild fehlerfrei arbeitet.

  • Heaplayout

  • Kompilierung

  • Zeigerunterstützung

  • Optimierungen

Weitere Informationen über das Abfangen von Releasebuildfehlern im Debugbuild finden Sie unter der Compileroption /GZ (Laufzeitfehlerüberprüfung für Stapelrahmen aktivieren).

Heaplayout

Wenn eine Anwendung als Debugbuild, nicht aber als Releasebuild fehlerfrei ausgeführt wird, liegt der Grund in neunzig Prozent aller Fälle beim Heaplayout.

Wenn Sie das Projekt für das Debuggen erstellen, verwenden Sie die Debug-Speicherbelegungsfunktion. Das bedeutet, dass alle Speicherbelegungen mit Schutzbytes umgeben werden. Durch diese Schutzbytes werden Speicherüberschreibungen ermittelt. Da Releasebuilds und Debugbuilds über unterschiedliche Heaplayouts verfügen, kann es vorkommen, dass eine Speicherüberschreibung in einem Debugbuild keinerlei Probleme verursacht, in einem Releasebuild jedoch drastische Auswirkungen hat.

Weitere Informationen finden Sie unter Suchen nach Speicherüberschreibungen und Verwenden des Debugbuilds zur Suche nach Speicherüberschreibungen.

Kompilierung

Zahlreiche MFC-Makros und ein großer Teil der MFC-Implementierung ändern sich, wenn Sie ein Releasebuild erstellen. Insbesondere nimmt das ASSERT-Makro in einem Releasebuild keine Auswertung vor, sodass kein ASSERT-Code ausgeführt wird. Weitere Informationen finden Sie unter Untersuchen von ASSERT-Anweisungen.

Einige Funktionen werden im Releasebuild implementiert, um die Verarbeitungsgeschwindigkeit als Inlinecode zu erhöhen. Optimierungen werden im Releasebuild in der Regel aktiviert. Außerdem wird eine andere Speicherbelegungsfunktion verwendet.

Zeigerunterstützung

Durch das Fehlen von Debuginformationen wird eine Art Schutzhülle aus der Anwendung entfernt. Daher ist es in einem Releasebuild wahrscheinlicher, dass "verirrte" Zeiger auf nicht initialisierten Speicher statt auf Debuginformationen zeigen.

Optimierungen

Je nach der Art bestimmter Codesegmente kann der optimierende Compiler unerwarteten Code generieren. Obwohl diese Situation relativ selten eintritt, kann sie gelegentlich zu Problemen mit dem Releasebuild führen. Unter Codeoptimierung finden Sie einen Lösungsansatz.

Siehe auch

Referenz

Releasebuilds

Beheben von Problemen mit dem Releasebuild