2012-06-19 17 views
13

Io uso di dare sempre un'occhiata all'eseguibile binario finale o alla DLL dopo il debug e alla creazione di un file con qualsiasi IDE. Ora sto provando Visual C++ 2010, nella ricerca della migliore versione, senza cestino o riferimenti inutili. Così, ho creato una nuova soluzione con due progetti: un eseguibile e la sua DLL. VC++ ha creato molti file intermedi tra il codice e il file finale. Ho aperto l'exe e la .dll con un editor esadecimale e ho visto qualcosa che non mi piace. Da qualche parte all'interno del file c'è un percorso assoluto per il file .PDB.Rimuovi riferimenti PDB dal file rilasciato

Perché? Come posso rimuoverlo da VC++?

Per questo deve esserci un comando di pre-processore. Qual è l'utilizzo di un percorso assoluto per un file .PDB, come "D: \ My Projects \ Project1 \ Release \ Project1.pdb" all'interno del file binario di un file che verrà distribuito su computer con cartelle diverse? Inoltre, non mi piace vedere uno dei percorsi del mio disco salvato in un file binario che voglio condividere con altre persone. Sono in modalità Release, non vedo l'uso di quelle informazioni inutili. Come posso rimuoverlo? Grazie!

+0

Possibile duplicato di questo [domanda] [1]? È possibile rimuovere il percorso del PDB. Ma, per favore, mantieni il riferimento al PPB. [1]: http: // stackoverflow.it/questions/7596628/strip-the-path-to-the-pdb – mox

risposta

7

leggere la documentazione PDB Files su MSDN:

file di un database di programma (PDB) detiene il debug e progetto di informazioni sullo stato che permette il collegamento incrementale di una configurazione di debug del vostro programma. Un file PDB viene creato quando si compila un programma C/C++ con/ZI o/Zi o un programma Visual Basic/C#/JScript .NET con/debug.

In Visual C++, l'opzione/Fd indica il file PDB creato dal compilatore. Quando si crea un progetto in Visual Studio utilizzando le procedure guidate, l'opzione/Fd è impostata per creare un PDB denominato project.PDB.

Si noti che il percorso assoluto è menzionato nella documentazione:

Il debugger di Visual Studio utilizza il file project.PDB creato dal linker direttamente e incorpora il percorso assoluto al PPB in EXE o File DLL

Si può sempre andare a Proprietà progetto> Linker> Debugging> Genera informazioni di debug e impostarlo su No.

+0

È strano che anche se sono in modalità Release, i file .PDB sono ancora generati. Grazie per la tua risposta – ali

+0

@ali: questa è l'impostazione predefinita quando crei un nuovo progetto. Tuttavia, puoi sempre spegnerlo. Si noti che il PDB è richiesto solo per * debugging * e * link incrementale * e non è necessario spedirlo (a meno che non si desideri che i clienti siano in grado di eseguire il debug). – dirkgently

+3

O.K. Grazie! Ora ho cambiato e funziona! Odio vedere le stringhe rivelate nel codice binario! – ali

9

È possibile utilizzare /pdbpath:none per rimuovere il nome completo del percorso completo del file PDB, ma mantenere il nome ed estensione solo del PDB. Mantenere il nome (e l'estensione) del PDB per le immagini rilasciate è l'unico modo per eseguire il debug di un'immagine che è bacata. Le immagini di Windows mantengono quasi sempre il nome e l'estensione dei PDB!

+3

Questa è la soluzione migliore, tuttavia le versioni più recenti hanno rinominato l'opzione e ora devi passare '/ pdbaltpath:% _ PDB%' al linker. –

2

Se non ti dispiace utilizzando uno strumento esterno e non è possibile ricostruire il modulo con/pdbpath: nessuno, il strumento peupdate può essere utilizzato per elencare, rimuovere o modificare la stringa PPB in un modulo eseguibile:

http://bytepointer.com/tools/index.htm#peupdate

Si potrebbe utilizzare lo strumento come segue per cancellare il percorso PPB:

peupdate -c <module_path>