2012-12-21 1 views
5

Ho bisogno di eseguire il debug della versione di rilascio della mia libreria collegata. Sto già generando informazioni di debug con la mia build di rilascio in seguito a questo article ma come posso fare lo stesso con il progetto di libreria? Si noti che il progetto di libreria non ha una pagina di collegamento in proprietà in cui vengono create le informazioni di debug nel link sopra. Sto usando VS2010.come eseguire il debug di una versione di libreria in Visual Studio

Quello che voglio veramente è fare in modo che TRACE lavori eseguendo il debug della libreria. Ho provato a collegare la versione di debug della libreria con il rilascio exe ma crea errori di linker.

+1

Stai parlando di una libreria statica o di una DLL? –

+0

@JerryCoffin È una libreria statica no dll. – zar

+0

Che tipo di applicazione stai utilizzando? – makc

risposta

2

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 ...

+0

+1 Ho notato che TRACE non funzionava, la tua risposta ha aiutato. – zar

1

Una libreria statica non è collegata, quindi non sorprende che le opzioni del linker non siano disponibili. Fondamentalmente hai solo bisogno di dire al compilatore di produrre informazioni di debug. Da lì, creare la libreria è poco più che mettere insieme un mucchio di file oggetto in un singolo file.

Fondamentalmente, basta dire al compilatore per produrre informazioni di debug e la libreria conterrà informazioni di debug.

+0

+1 grazie hai ragione, ho disabilitato l'ottimizzazione e sono stato in grado di eseguirne il debug. Anche prima ho potuto eseguire il debug/passaggio nel codice prima, ma la finestra di watch mostrava valori fasulli a volte. – zar