Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
PDBCopy è uno strumento da riga di comando che crea un file di simboli rimosso da un file di simboli completo. In altre parole, accetta un file di simboli che contiene sia i dati dei simboli privati che una tabella dei simboli pubblici e crea una copia di tale file che contiene solo la tabella dei simboli pubblica. A seconda delle opzioni di PDBCopy utilizzate, il file di simboli rimosso contiene l'intera tabella dei simboli pubblica o un subset specificato della tabella dei simboli pubblici.
Per il percorso di PDBCopy in WDK, vedere Directory di installazione in Strumenti inclusi in Strumenti di debug per Windows.
PDBCopy funziona con qualsiasi file di simboli in formato PDB (con estensione pdb), ma non con i file di simboli di formato meno recenti (con estensione dbg).
Per una descrizione delle tabelle dei simboli pubbliche e dei dati dei simboli privati, vedere Simboli pubblici e privati.
Rimozione di simboli privati
Se si desidera creare un file di simboli rimosso che contiene tutti i simboli pubblici e nessuno dei simboli privati, usare PDBCopy con tre parametri: il percorso e il nome del file di simboli originale, il percorso e il nome del nuovo file di simboli e l'opzione -p.
Ad esempio, il comando seguente crea un nuovo file, denominato publicsymbols.pdb, che contiene la stessa tabella dei simboli pubblica di mysymbols.pdb, ma contiene nessuno dei dati dei simboli privati:
pdbcopy mysymbols.pdb publicsymbols.pdb -p
Se mysymbols.pdb è già un file di simboli rimosso, il contenuto simbolico del nuovo file e il file precedente sarà identico.
Dopo aver eseguito questo comando, è necessario spostare il nuovo file in un nuovo percorso e rinominarlo nel nome originale del file di simboli (in questo esempio mysymbols.pdb), perché la maggior parte dei programmi di debug e dei programmi di estrazione dei simboli cerca simboli in base a un nome di file specifico. In alternativa, è possibile usare lo stesso nome file per il file di input e il file di output nella riga di comando PDBCopy, purché vengano specificate directory diverse:
pdbcopy c:\dir1\mysymbols.pdb c:\dir2\mysymbols.pdb -p
Nota Il file di destinazione non deve esistere prima dell'esecuzione di PDBCopy. Se esiste un file con questo nome, possono verificarsi vari errori.
Rimozione di simboli privati e simboli pubblici selezionati
Se si desidera non solo rimuovere i dati dei simboli privati, ma anche ridurre la quantità di informazioni nella tabella dei simboli pubblici, è possibile usare l'opzione -f per specificare un elenco di simboli pubblici da rimuovere.
Nell'esempio seguente viene illustrata questa procedura:
Determinare i nomi completi, incluse le decorazioni, dei simboli da rimuovere. Se non si è certi dei nomi dei simboli decorati, è possibile usare lo strumento DBH per determinarli. Per informazioni dettagliate, vedere Determinazione delle decorazioni di un simbolo specifico. In questo esempio si supponga che i nomi decorati dei simboli da rimuovere siano _myGlobal1 e _myGlobal2.
Creare un file di testo contenente un elenco dei simboli da rimuovere. Ogni riga in questo file deve includere il nome di un simbolo, incluse le decorazioni, ma non i nomi dei moduli. In questo esempio il file conterrà le due righe seguenti:
_myGlobal1 _myGlobal2Il file può essere assegnato a qualsiasi nome scelto. Si supponga di assegnare al file il nome listfile.txt e inserirlo nella directory C:\Temp.
Usare la riga di comando PDBCopy seguente:
pdbcopy OldPDB NewPDB -p -f:@TextFiledove OldPDB e NewPDB sono il file di simboli originale e il nuovo file di simboli e TextFile è il file creato nel passaggio due. L'opzione -f indica che determinati simboli pubblici devono essere rimossi e l'e commerciale ( @ ) indica che questi simboli sono elencati nel file di testo specificato.
Nell'esempio corrente il comando sarà simile al seguente:
pdbcopy c:\dir1\mysymbols.pdb c:\dir3\mysymbols.pdb -p -f:@c:\temp\listfile.txtVerrà creato un nuovo file di simboli C:\dir3\mysymbols.pdb, which does not contain any private symbols and does not contain the two global variables you listed in listfile.txt.
Come illustrato in questo esempio, l'opzione -f di PDBCopy rimuove un elenco specifico di simboli pubblici. L'e commerciale ( @ ) indica che questi simboli sono elencati in un file di testo. Un metodo alternativo consiste nell'elencare tutti i simboli nella riga di comando, usando l'opzione -f senza &. Di conseguenza, la riga di comando seguente equivale all'esempio nella procedura precedente:
pdbcopy c:\dir1\mysymbols.pdb c:\dir3\mysymbols.pdb -p -f:_myGlobal1 -f:_myGlobal2
A meno che non si voglia rimuovere solo uno o due simboli, è più semplice usare un file di testo che elencarli nella riga di comando.
Se si desidera rimuovere la maggior parte dei simboli pubblici dal file con estensione pdb, l'opzione -F è il metodo più semplice. Mentre l'opzione -f richiede di elencare i simboli pubblici da rimuovere, l'opzione -F richiede di elencare i simboli pubblici che non si desidera rimuovere. Tutti gli altri simboli pubblici (e tutti i simboli privati) verranno rimossi. L'opzione -F supporta le stesse due opzioni di sintassi dell'opzione -f: -F: seguita dal nome di un simbolo da conservare oppure -F:@ seguito dal nome di un file di testo contenente un elenco dei simboli da conservare. In entrambi i casi, è necessario usare i nomi dei simboli decorati.
Ad esempio, il comando seguente rimuove tutti i simboli privati e quasi tutti i simboli pubblici, lasciando solo i simboli _myFunction5 e _myGlobal7:
pdbcopy c:\dir1\mysymbols.pdb c:\dir3\mysymbols.pdb -p -F:_myFunction5 -F:_myGlobal7
Se si combinano più istanze dell'opzione -f su una riga, tutti i simboli specificati vengono rimossi. Se si combinano più istanze dell'opzione -F su una riga, tutti i simboli specificati vengono mantenuti e tutti gli altri simboli vengono rimossi. Non è possibile combinare -f con -F.
Le opzioni -f e -F non possono essere usate senza l'opzione -p, che rimuove tutti i dati dei simboli privati. Anche se il file originale non contiene simboli privati, è comunque necessario includere l'opzione -p (anche se in questo caso non ha alcun effetto).
Impossibile utilizzare l'opzione -F per impedire la rimozione dei dati dei simboli privati. Se si usa questa opzione con un simbolo non incluso nella tabella dei simboli pubblici, PDBCopy lo ignora.
Il file mspdb*.dll
PDBCopy deve accedere al file Mspdb80.dll o al file Mspdb60.dll per poter essere eseguito. Per impostazione predefinita, PDBCopy usa Mspdb80.dll, ovvero la versione usata da Visual Studio .NET 2002 e versioni successive di Visual Studio. Se i simboli sono stati compilati usando Visual Studio 6.0 o una versione precedente, è possibile specificare l'opzione della riga di comando -vc6 in modo che PDBCopy usi invece Mspdb60.dll, anche se non è obbligatorio. PDBCopy cerca il file appropriato anche se l'opzione -vc6 non viene usata. È possibile trovare questi file all'interno dell'installazione di Visual Studio, Platform SDK o Windows Driver Kit (WDK).
Prima di eseguire PDBCopy, assicurarsi che la versione corretta di mspdb*.dll file sia accessibile al computer e assicurarsi che il percorso faccia parte del percorso del comando. In caso contrario, è consigliabile usare il comando path per aggiungere questo percorso al percorso del comando.
Firma del file e indice SymSrv
Ogni file di simboli ha una firma fissa che lo identifica in modo univoco. SymSrv usa la firma per generare un "valore di indice" univoco per il file. Se due file hanno contenuti diversi o tempi di creazione diversi, avranno anche firme distinte e valori di indice SymSrv distinti.
I file creati con PDBCopy sono un'eccezione alla regola dei valori di indice univoci. Quando PDBCopy crea un nuovo file di simboli, ha la stessa firma e il valore dell'indice SymSrv del file precedente. Questa funzionalità consente di sostituire un file con l'altro senza modificare il comportamento degli strumenti correlati ai simboli.
Se si desidera che il nuovo file abbia una firma distinta e un indice SymSrv, usare l'opzione -s. Nella maggior parte dei casi non si vuole usare questa opzione, poiché l'uso più comune di PDBCopy consiste nel creare un file di simboli modificato in grado di sostituire il file precedente senza causare una mancata corrispondenza. Una nuova firma può causare l'assegnazione di un valore di indice diverso al nuovo file da parte di SymSrv, impedendo che il nuovo file sostituisca correttamente quello precedente.
Per la sintassi completa della riga di comando, vedere Opzioni Command-Line PDBCopy.