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 ...
Sprechen Sie über eine statische Bibliothek oder eine DLL? –
@JerryCoffin Es ist statische Bibliothek keine DLL. – zar
Welche Art von Anwendung laufen Sie? – makc