2012-06-28 15 views
28

Ich muss ein C++ - Projekt debuggen, aber da eine Abhängigkeit im Debug-Modus nicht kompiliert wird und ich dieses Problem bisher nicht beheben konnte, möchte ich versuchen, das Projekt im Freigabemodus zu debuggen.Wie Debuggen im Freigabemodus?

Derzeit stürzt die Anwendung aufgrund eines Null-Zeigers, aber ich habe nicht den Code, der den Fehler verursacht. Da Breakpoints im Release-Modus scheinbar ignoriert werden, würde ich gerne wissen, wie der Fehler am besten zu finden ist.

Antwort

52

In VS, klicken Sie mit der rechten Maustaste auf Ihr Projekt, wählen Sie "Eigenschaften".

  1. Klicken Sie auf den C/C++ Knoten. Setzen Sie das Debug-Informationsformat auf C7-kompatibel (/ Z7) oder Programm-Datenbank (/ Zi).

  2. Erweitern Sie Linker und klicken Sie auf den Knoten Allgemein. Aktivieren Sie Inkrementelle Verknüpfung auf Nein (/ INKREMENTAL: NEIN).

  3. Wählen Sie den Debugging-Knoten aus. Setzen Sie Debug Info auf Ja (/ DEBUG).

  4. Wählen Sie den Knoten Optimierung. Setzen Sie Verweise auf Ja (/ OPT: REF).

    Wenn/OPT: REF angegeben ist,/OPT: ICF ist standardmäßig aktiviert.

, die direkt von der Microsoft-Dokumentation gerissen ist:

ich tun, um diese die ganze Zeit und so ziemlich nie mehr im Debug-Modus debuggen. Wie Sie wissen, treten viele Fehler, die bei einem Release-Build auftreten, möglicherweise nicht in einem Debug-Build auf (fast sicher die Fehler, die beim Aufruf von UB auftreten).

Auch arbeite ich an einem Projekt, das eine Menge Bildverarbeitung verwendet und eine große Komprimierung/Dekomprimierung von großen Bildern durchführt. Die Verwendung eines langsamen Debug-Builds ist einfach unpraktisch.

+0

dank Problem gelöst!Ich weiß nicht viel über die Auswirkungen all dieser Einstellungen, also ist es besser, sie nur für das Debuggen zu verwenden und sie wieder zu entfernen, wenn Sie eine aktuelle Release-Version kompilieren? – Pedro

+5

@Pedro: Ja, es ist wahrscheinlich am besten, sie zurückzusetzen und die Standardwerte für die Freigabe auf ON zu belassen. Normalerweise erstelle ich einen neuen Buildtyp für diese Konfiguration, d. H. "Release w/symbols". Das heißt, es kann nicht schaden, zu untersuchen, was diese Schalter tatsächlich tun. –

4

Sie können nicht immer nur die Projekteinstellungen ändern und neu kompilieren.
Manchmal haben Sie eine freigegebene Version, die Sie debuggen möchten, oder eine von einem Client gesendete Dump-Datei.

Beim Kompilieren eines C++ - Projekts in einer Version mit Optimierungen zeigt der Debugger manchmal nicht die richtigen Objektinformationen an.

Die lokalen Variablen sind in der Regel die ersten, und oft gehen die Informationen dieses Objekts an den Debugger verloren.

Der Grund ist, dass der Compiler die verfügbaren Hardwareregister verwendet, um die Informationen zu speichern, und Optimierungen verwendet, um die Zuweisung lokaler Variablen zu vermeiden.

Ich habe einen Weg vorgeschlagen, hier die fehlenden Informationen zu finden:

Debugging Release Projects in C++ - Finding the Lost Object Information

+0

@Es Antwort ist großartig, wenn Sie Zugriff auf Code und IDE haben. Yochais Antwort lesenswert. –

Verwandte Themen