2012-12-21 5 views
5

Ich muss die Release-Version meiner verknüpften Bibliothek debuggen. Ich erzeuge bereits Debug-Informationen mit meinem Release-Build nach dieser article, aber wie kann ich das gleiche mit dem Bibliotheksprojekt tun? Beachten Sie, dass das Bibliotheksprojekt keine Link-Seite in Eigenschaften hat, in denen Debug-Informationen im obigen Link erstellt werden. Ich verwende VS2010.Debuggen einer Release-Version der Bibliothek in Visual Studio

Was ich wirklich will ist, dass TRACE funktioniert, wenn die Bibliothek debuggen. Ich habe versucht, die Debug-Version der Bibliothek mit der Release-Exe zu verknüpfen, aber es erzeugt Linker-Fehler.

+1

Sprechen Sie über eine statische Bibliothek oder eine DLL? –

+0

@JerryCoffin Es ist statische Bibliothek keine DLL. – zar

+0

Welche Art von Anwendung laufen Sie? – makc

Antwort

2

Was ich wirklich will, ist TRACE Arbeit zu machen ...

Sie meinen die MFC TRACE-Makro? Derjenige, der Nachrichten in das Debug/Output-Fenster des Debuggers schreibt?

Leider, selbst wenn Sie Ihre Buildeinstellungen so korrigieren, dass Ihre endgültige ausführbare Datei Debuginformationen für Ihre statische Bibliothek enthält, werden diese Traceanweisungen nicht zurückgegeben. TRACE ist ein Makro und wird daher vom Compiler-Präprozessor behandelt. Wenn Sie im Freigabemodus kompilieren, wird dieses Makro als ein No-Op neu definiert. Es ist, als ob die TRACE-Anweisung aus dem Quellcode gelöscht wurde.

Auch wenn Sie das Problem lösen, Debug-Symbole zu Ihrer Bibliothek und ausführbaren Datei hinzuzufügen, werden diese Trace-Anweisungen nicht zurückgebracht. Sie wurden während der Kompilierungsphase entfernt.

Was also zu tun? Stellt sich heraus, wenn Sie tief genug in diese Makros graben, rufen sie schließlich eine Win32-Funktion OutputDebugString. Dieser Aufruf ist sowohl in der Debug- als auch in der Release-Version der MS-Bibliotheken verfügbar. Also ... Sie könnten die Trace-Makros durch explizite Aufrufe von OutputDebugString ersetzen - es ist nicht so praktisch mit Code zu arbeiten, aber zumindest bekommen Sie Ihre Debug-Ausgabe im Release-Modus.

BTW, ich habe endlich auf all diese Makros vor Jahren aufgegeben und wir haben sie komplett durch Anrufe ersetzt. Jedes Protokollierungs-Framework wäre besser als die Ablaufverfolgungs-Makros - weil die Zeit, in der Sie wirklich die Ablaufverfolgung benötigen, nicht beim Debuggen erfolgt, sondern wenn der Code in Produktion ist und Sie das Problem nicht lokal reproduzieren können. Es ist viel besser, sich in eine Datei einzuloggen, die der Kunde an Sie senden kann, und dann auf die Ablaufverfolgung zu setzen, die nur im Debugger funktioniert. Irgendetwas zu beachten ...

+0

+1 Ich habe bemerkt, dass die TRACE nicht funktionierte, Ihre Antwort half. – zar

1

Eine statische Bibliothek ist nicht verknüpft, daher ist es keine Überraschung, dass Linkeroptionen nicht verfügbar sind. Sie müssen dem Compiler im Grunde nur sagen, dass er Debugging-Informationen erzeugt. Von dort aus ist das Erstellen der Bibliothek wenig mehr als das Zusammenstellen einer Menge von Objektdateien in einer einzigen Datei.

Also im Grunde nur sagen, die Compiler Debug-Informationen zu erzeugen, und die Bibliothek wird Debug-Informationen enthalten.

+0

+1 danke, dass Sie Recht haben, ich deaktivierte Optimierung und ich konnte es debuggen. Schon vorher war ich in der Lage, den Code vorher zu debuggen/zu betreten, aber das Überwachungsfenster zeigte zeitweise falsche Werte. – zar

Verwandte Themen