Verwenden von PDBCopy
PDBCopy ist ein Befehlszeilentool, das eine entfernte Symboldatei aus einer vollständigen Symboldatei erstellt. Anders ausgedrückt: Es nimmt eine Symboldatei an, die sowohl private Symboldaten als auch eine öffentliche Symboltabelle enthält, und erstellt eine Kopie dieser Datei, die nur die öffentliche Symboltabelle enthält. Je nachdem, welche PDBCopy-Optionen verwendet werden, enthält die Stripped-Symboldatei entweder die gesamte öffentliche Symboltabelle oder eine angegebene Teilmenge der öffentlichen Symboltabelle.
Informationen zum Speicherort von PDBCopy im WDK finden Sie unter Installationsverzeichnis in Tools, die in Debugtools für Windows enthalten sind.
PDBCopy funktioniert mit jeder SYMBOLdatei im PDB-Format (mit der Dateinamenerweiterung .pdb), aber nicht mit den älteren Formatdateien (.dbg).
Eine Beschreibung der öffentlichen Symboltabellen und privaten Symboldaten finden Sie unter Öffentliche und private Symbole.
Entfernen privater Symbole
Wenn Sie eine Stripped-Symboldatei erstellen möchten, die alle öffentlichen Symbole und keines der privaten Symbole enthält, verwenden Sie PDBCopy mit drei Parametern: Pfad und Name der ursprünglichen Symboldatei, Pfad und Name der neuen Symboldatei und Option -p.
Der folgende Befehl erstellt beispielsweise eine neue Datei namens publicsymbols.pdb, die dieselbe öffentliche Symboltabelle wie mysymbols.pdb enthält, aber keine der privaten Symboldaten enthält:
pdbcopy mysymbols.pdb publicsymbols.pdb -p
Wenn mysymbols.pdb bereits eine entfernte Symboldatei ist, sind der symbolische Inhalt der neuen Datei und der alten Datei identisch.
Nachdem Sie diesen Befehl ausgegeben haben, sollten Sie die neue Datei an einen neuen Speicherort verschieben und in den ursprünglichen Namen der Symboldatei umbenennen (in diesem Beispiel mysymbols.pdb), da die meisten Debugprogramme und Symbolextraktionsprogramme nach Symbolen suchen, die auf einem bestimmten Dateinamen basieren. Alternativ können Sie denselben Dateinamen für die Eingabedatei und die Ausgabedatei in der PDBCopy-Befehlszeile verwenden, sofern unterschiedliche Verzeichnisse angegeben sind:
pdbcopy c:\dir1\mysymbols.pdb c:\dir2\mysymbols.pdb -p
Hinweis Die Zieldatei sollte nicht vorhanden sein, bevor PDBCopy ausgeführt wird. Wenn eine Datei mit diesem Namen vorhanden ist, können verschiedene Fehler auftreten.
Entfernen privater Symbole und ausgewählter öffentlicher Symbole
Wenn Sie nicht nur die privaten Symboldaten entfernen möchten, sondern auch die Menge der Informationen in der öffentlichen Symboltabelle verringern möchten, können Sie die Option -f verwenden, um eine Liste der öffentlichen Symbole anzugeben, die entfernt werden sollen.
Im folgenden Beispiel wird dieses Verfahren veranschaulicht:
Bestimmen Sie die vollständigen Namen der Symbole, die Sie entfernen möchten, einschließlich der Dekorationen. Wenn Sie nicht sicher sind, ob die Namen der ergänzten Symbole verwendet werden, können Sie sie mit dem DBH-Tool ermitteln. Weitere Informationen finden Sie unter Bestimmen der Dekorationen eines bestimmten Symbols. In diesem Beispiel nehmen wir an, dass die ergänzten Namen der Symbole, die Sie entfernen möchten, _myGlobal1 und _myGlobal2 sind.
Erstellen Sie eine Textdatei, die eine Liste der zu entfernenden Symbole enthält. Jede Zeile in dieser Datei sollte den Namen eines Symbols enthalten, einschließlich Dekorationen, aber keine Modulnamen. In diesem Beispiel würde die Datei die folgenden zwei Zeilen enthalten:
_myGlobal1 _myGlobal2
Die Datei kann einen beliebigen Namen erhalten, den Sie auswählen. Angenommen, Sie benennen diese Datei listfile.txt und platzieren sie im Verzeichnis C:\Temp.
Verwenden Sie die folgende PDBCopy-Befehlszeile:
pdbcopy OldPDB NewPDB -p -f:@TextFile
Wobei OldPDB und NewPDB die ursprüngliche Symboldatei und die neue Symboldatei und TextFile die in Schritt 2 erstellte Datei sind. Die Option -f gibt an, dass bestimmte öffentliche Symbole entfernt werden sollen, und das Amper- und Zeichenzeichen ( @ ) gibt an, dass diese Symbole in der angegebenen Textdatei aufgeführt sind.
Im aktuellen Beispiel würde der Befehl wie folgt aussehen:
pdbcopy c:\dir1\mysymbols.pdb c:\dir3\mysymbols.pdb -p -f:@c:\temp\listfile.txt
Dadurch wird die neue Symboldatei C:\dir3\mysymbols.pdb erstellt, die keine privaten Symbole enthält und nicht die beiden globalen Variablen enthält, die Sie in listfile.txt aufgeführt haben.
Wie in diesem Beispiel gezeigt, entfernt die Option -f von PDBCopy eine bestimmte Liste öffentlicher Symbole. Das Ampersand ( @ ) gibt an, dass diese Symbole in einer Textdatei aufgeführt sind. Eine alternative Methode besteht darin, alle Symbole in der Befehlszeile mit der Option -f ohne ampersand auflisten zu lassen. Daher entspricht die folgende Befehlszeile dem Beispiel in der obigen Prozedur:
pdbcopy c:\dir1\mysymbols.pdb c:\dir3\mysymbols.pdb -p -f:_myGlobal1 -f:_myGlobal2
Sofern Sie nicht nur ein oder zwei Symbole entfernen möchten, ist es einfacher, eine Textdatei zu verwenden, als sie in der Befehlszeile aufzulisten.
Wenn Sie die Mehrheit der öffentlichen Symbole aus Ihrer PDB-Datei entfernen möchten, ist die Option -F die einfachste Methode. Während die Option -f erfordert, dass Sie die öffentlichen Symbole auflisten, die Sie entfernen möchten, müssen Sie für die Option -F die öffentlichen Symbole auflisten, die Sie nicht entfernen möchten. Alle anderen öffentlichen Symbole (sowie alle privaten Symbole) werden entfernt. Die Option -F unterstützt die gleichen beiden Syntaxoptionen wie die Option -f: entweder -F: gefolgt vom Namen eines beizubehaltenden Symbols oder -F:@ gefolgt vom Namen einer Textdatei, die eine Liste der zu speichernden Symbole enthält. In beiden Fällen müssen ergänzte Symbolnamen verwendet werden.
Der folgende Befehl entfernt beispielsweise alle privaten Und fast alle öffentlichen Symbole, sodass nur die Symbole _myFunction5 und _myGlobal7:
pdbcopy c:\dir1\mysymbols.pdb c:\dir3\mysymbols.pdb -p -F:_myFunction5 -F:_myGlobal7
Wenn Sie mehrere Instanzen der Option -f in einer Zeile kombinieren, werden alle angegebenen Symbole entfernt. Wenn Sie mehrere Instanzen der Option -F in einer Zeile kombinieren, werden alle angegebenen Symbole beibehalten, und alle anderen Symbole werden entfernt. Sie können -f nicht mit -F kombinieren.
Die Optionen -f und -F können nicht ohne die Option -p verwendet werden, die alle privaten Symboldaten entfernt. Auch wenn Ihre ursprüngliche Datei keine privaten Symbole enthält, müssen Sie die Option -p weiterhin einschließen (obwohl sie in diesem Fall keine Auswirkungen hat).
Die Option -F kann nicht verwendet werden, um zu verhindern, dass die Daten des privaten Symbols entfernt werden. Wenn Sie diese Option mit einem Symbol verwenden, das nicht in der öffentlichen Symboltabelle enthalten ist, ignoriert PDBCopy dies.
Die mspdb*.dll-Datei
PDBCopy muss entweder auf die Mspdb80.dll-Datei oder die Mspdb60.dll-Datei zugreifen, um ausgeführt zu werden. Standardmäßig verwendet PDBCopy Mspdb80.dll, die von Visual Studio .NET 2002 und höheren Versionen von Visual Studio verwendet wird. Wenn Ihre Symbole mit Visual Studio 6.0 oder einer früheren Version erstellt wurden, können Sie die Befehlszeilenoption -vc6 angeben, sodass PDBCopy stattdessen Mspdb60.dll verwendet, obwohl dies nicht erforderlich ist. PDBCopy sucht auch dann nach der entsprechenden Datei, wenn die Option -vc6 nicht verwendet wird. Sie finden diese Dateien in Ihrer Installation von Visual Studio, dem Platform SDK oder dem Windows Driver Kit (WDK).
Stellen Sie vor dem Ausführen von PDBCopy sicher, dass auf ihren Computer auf die richtige Version der Datei mspdb*.dll zugegriffen werden kann, und stellen Sie sicher, dass ihr Speicherort Teil des Befehlspfads ist. Wenn dies nicht der Fall ist, sollten Sie den Pfadbefehl verwenden, um diesen Speicherort dem Befehlspfad hinzuzufügen.
Die Dateisignatur und der SymSrv-Index
Jede Symboldatei verfügt über eine feste Signatur, die sie eindeutig identifiziert. SymSrv verwendet die Signatur, um einen eindeutigen "Indexwert" für die Datei zu generieren. Wenn zwei Dateien unterschiedliche Inhalte oder unterschiedliche Erstellungszeiten haben, verfügen sie auch über unterschiedliche Signaturen und unterschiedliche SymSrv-Indexwerte.
Dateien, die mit PDBCopy erstellt wurden, stellen eine Ausnahme von der Regel eindeutiger Indexwerte. Wenn PDBCopy eine neue Symboldatei erstellt, weist sie den gleichen Signatur- und SymSrv-Indexwert wie die alte Datei auf. Mit diesem Feature kann eine Datei durch die andere ersetzt werden, ohne das Verhalten von symbolbezogenen Tools zu ändern.
Wenn die neue Datei über eine eindeutige Signatur und einen symSrv-Index verfügen soll, verwenden Sie die Option -s. In den meisten Fällen möchten Sie diese Option nicht verwenden, da PDBCopy am häufigsten verwendet wird, um eine geänderte Symboldatei zu erstellen, die die alte Datei ersetzen kann, ohne einen Konflikt zu verursachen. Eine neue Signatur kann dazu führen, dass SymSrv der neuen Datei einen anderen Indexwert als der alten Datei zuweist, wodurch verhindert wird, dass die alte Datei ordnungsgemäß ersetzt wird.
Die vollständige Befehlszeilensyntax finden Sie unter PDBCopy Command-Line Options.