Quello che voglio è quello di rendere il lavoro TRACE ...
Vuoi dire che il TRACE macro MFC? Quello che scrive i messaggi nella finestra di debug/output del debugger?
Sfortunatamente, anche se si correggono le impostazioni di generazione in modo che il file eseguibile finale contenga le informazioni di debug per la libreria statica, non restituirà quelle istruzioni di traccia. TRACE è una macro e pertanto è gestita dal preprocessore del compilatore. Quando si compila in modalità di rilascio, quella macro viene ridefinita come non operante. È come se l'istruzione TRACE fosse stata cancellata dal codice sorgente.
Anche se si risolve il problema di aggiungere simboli di debug alla libreria e all'eseguibile, non restituirà tali istruzioni di tracciamento. Sono stati rimossi durante la fase di compilazione.
Quindi cosa fare? Risulta, se si scava abbastanza in profondità in quelle macro, in definitiva stanno chiamando una funzione Win32 OutputDebugString. Questa chiamata è disponibile in entrambe le versioni di debug e release delle librerie ms. Quindi ... puoi sostituire le macro di traccia con chiamate esplicite a OutputDebugString - non è conveniente con il codice ma almeno avrai l'output di debug in modalità di rilascio.
BTW, ho finalmente rinunciato a tutti quei macrosecchi anni fa e li abbiamo completamente sostituiti con le chiamate log4cplus. Qualsiasi framework di registrazione sarebbe migliore delle macro di tracciamento - perché il tempo in cui è veramente necessario eseguire la traccia non è quando si esegue il debug ma quando il codice è in produzione e non è possibile riprodurre localmente il problema. È molto meglio accedere a un file che il cliente può inviarti, quindi fare affidamento sulla traccia che funziona solo nel debugger. Qualcosa da considerare comunque ...
fonte
2012-12-21 05:52:41
Stai parlando di una libreria statica o di una DLL? –
@JerryCoffin È una libreria statica no dll. – zar
Che tipo di applicazione stai utilizzando? – makc