2011-09-29 12 views
7

Per impostazione predefinita, quando si compila un progetto di Visual Studio in modalità di rilascio, il percorso completo del progetto preliminare di bilancio è messo in file di immagine, ad esempio:Striscia il percorso dei PPB

c:\myprojects\demo\release\test.pdb 

Utilizzando un'opzione non documentata linker (/pdbpath:none) si può forzare Visual Studio 2008 per ridurre il nome completo qualificato del PPB, per esempio:

test.pdb 

ho bisogno di fare lo stesso con un progetto che è ancora costruito utilizzando VC6.

ho provato l'interruttore "/pdbpath:none" a livello impostazioni del progetto, ma il linker lamenta questo interruttore sconosciuta.

Qualcuno sa un metodo (o uno strumento) per raggiungere questo obiettivo sia quando si collega un progetto VC6 o poi direttamente a livello di immagine?

+0

Questo interruttore è disponibile (documentato) a partire da Visual Studio 2010 – mox

+0

Questo parametro funziona anche con Visual Studio 2008. – mox

+0

C'è uno strumento chiamato peupdate ([sito Web qui] (http://bytepointer.com/tools/index .htm # peupdate)) che rimuoverà, eliminerà o modificherà in altro modo questa stringa PDB su qualsiasi valore arbitrario per un EXE o una DLL. Per la tua domanda specifica, dovresti usare l'opzione "-s" (striscia) per rimuovere il percorso ma lasciare intatto il nome del file. – byteptr

risposta

2

La cosa migliore è quella di utilizzare pdbstr.exe da MS direttamente. Permette l'estrazione diretta, l'aggiornamento e varie altre funzioni direttamente, indipendentemente dalla versione del compilatore (fino all'ultima versione supportata, che a mio avviso è VS2013 in questo momento). Lo usiamo per aggiungere collegamenti SVN direttamente ai PDB che poi archiviamo in negozi di simboli locali usando srctool.

+0

Grazie! Interessante vedere che questa utility utilizza Alternate Data Stream (ADS) ... "per inserire le informazioni sul controllo della versione nel flusso alternativo" srcsrv "del file .pdb di destinazione". – mox

+0

Quale sarebbe una riga di comando di esempio per utilizzare pdbstr.exe? Anche con i documenti, non riuscivo a capire come spogliare il percorso. – byteptr

+0

@byteptr Ci scusiamo per la risposta tardiva. Usiamo uno script Poweshell per costruire il nostro nuovo blocco in un file di flusso temporaneo ($ streamContent), e quindi chiamare l'eseguibile direttamente in questo modo: . "$ ToolPath" /pdbstr.exe -w -s: srcsrv "-p: $ pdbFullName" "-i: $ streamContent" Aggiunge il flusso specificato come flusso srcsrv al pdb specificato in $ pdbFullName, che include il percorso e tutto il resto. – Woody14619

0

Per più recenti link.exe versioni, la sintassi è cambiato.

l'opzione desiderata è ora /pdbaltpath:%_PDB%

È documentato su MSDN: https://msdn.microsoft.com/en-us/library/dd998269.aspx

%_PDB% espande al nome del file PDB reale senza alcuna informazione percorso

Per VC6, è possibile continuare a utilizzare gli stessi compilatori ma una nuova versione di link.exe.

le finestre kit driver vengono anche con uno strumento denominato binplace.exe che possono modificare queste informazioni post-generazione.

+0

Questo sembra essere rotto per le librerie statiche.LNK4044: opzione non riconosciuta '/ pdbaltpath:% _ PDB%'; ignorato – syplex

+0

@syplex: quale versione del linker stai usando? E cosa hanno a che fare le librerie statiche con il tuo problema? –

+0

Ho provato alcune versioni. Fino alla versione 14.12.25835.0. Cercando di capire come specificare o modificare il percorso del PDB per una libreria statica. Il percorso è incorporato in .lib come se fosse per DLL/EXE (anche se in modo diverso) ma non c'è modo di modificarlo. Mi aspetterei che qualcosa come PDBALTPATH ​​funzioni per questo, ma non ho trovato nulla. – syplex

Problemi correlati