Delen via


PDBCopy gebruiken

PDBCopy is een opdrachtregelprogramma waarmee een gestreept symboolbestand wordt gemaakt van een volledig symboolbestand. Met andere woorden, het neemt een symboolbestand dat zowel persoonlijke symboolgegevens als een openbare symbooltabel bevat, en maakt een kopie van dat bestand dat alleen de openbare symbooltabel bevat. Afhankelijk van welke PDBCopy-opties worden gebruikt, bevat het gestreepte symboolbestand de volledige openbare symbooltabel of een opgegeven subset van de openbare symbooltabel.

Zie Installatiemap in Hulpprogramma's opgenomen in Hulpprogramma's voor foutopsporing voor Windows voor de locatie van PDBCopy in de WDK.

PDBCopy werkt met elk PDB-symboolbestand (met de bestandsnaamextensie .pdb), maar niet met symboolbestanden in de oudere indeling (.dbg).

Zie Openbare en persoonlijke symbolen voor een beschrijving van openbare symbolentabellen en persoonlijke symboolgegevens.

Privésymbolen verwijderen

Als u een gestreept symboolbestand wilt maken dat alle openbare symbolen en geen van de persoonlijke symbolen bevat, gebruikt u PDBCopy met drie parameters: het pad en de naam van het oorspronkelijke symboolbestand, het pad en de naam van het nieuwe symboolbestand en de optie -p.

Met de volgende opdracht maakt u bijvoorbeeld een nieuw bestand met de naam publicsymbols.pdb, dat dezelfde openbare symbooltabel bevat als mysymbols.pdb, maar geen van de persoonlijke symboolgegevens bevat:

pdbcopy mysymbols.pdb publicsymbols.pdb -p

Als mysymbols.pdb al een gestreept symboolbestand is, is de symbolische inhoud van het nieuwe bestand en het oude bestand identiek.

Nadat u deze opdracht hebt uitgegeven, moet u het nieuwe bestand naar een nieuwe locatie verplaatsen en de naam ervan wijzigen in de oorspronkelijke naam van het symboolbestand (in dit voorbeeld mysymbols.pdb), omdat de meeste foutopsporingsprogramma's en programma's voor symboolextractie zoeken naar symbolen op basis van een specifieke bestandsnaam. U kunt ook dezelfde bestandsnaam gebruiken voor het invoerbestand en het uitvoerbestand op de opdrachtregel PDBCopy, zolang er verschillende mappen zijn opgegeven:

pdbcopy c:\dir1\mysymbols.pdb c:\dir2\mysymbols.pdb -p

Notitie Het doelbestand mag niet bestaan voordat PDBCopy wordt uitgevoerd. Als er een bestand met deze naam bestaat, kunnen er verschillende fouten optreden.

Persoonlijke symbolen en geselecteerde openbare symbolen verwijderen

Als u niet alleen de persoonlijke symboolgegevens wilt verwijderen, maar ook de hoeveelheid informatie in de openbare symbooltabel wilt verminderen, kunt u de optie -f gebruiken om een lijst met openbare symbolen op te geven die moeten worden verwijderd.

In het volgende voorbeeld ziet u deze procedure:

  1. Bepaal de volledige namen, inclusief decoraties, van de symbolen die u wilt verwijderen. Als u niet zeker bent van de versierde symboolnamen, kunt u de DBH-tool gebruiken om deze te bepalen. Zie De decoraties van een specifiek symbool bepalen voor meer informatie. In dit voorbeeld gaan we ervan uit dat de versierde namen van de symbolen die u wilt verwijderen , _myGlobal1 en _myGlobal2 zijn.

  2. Maak een tekstbestand met een lijst met de symbolen die moeten worden verwijderd. Elke regel in dit bestand moet de naam van één symbool bevatten, inclusief decoraties, maar niet inclusief modulenamen. In dit voorbeeld bevat het bestand de volgende twee regels:

    _myGlobal1
    _myGlobal2
    

    Het bestand kan elke gewenste naam krijgen. Stel dat u dit bestand de naam listfile.txt geeft en het in de map C:\Temp plaatst.

  3. Gebruik de volgende PDBCopy-opdrachtregel:

    pdbcopy OldPDB NewPDB -p -f:@TextFile
    

    waarbij OldPDB en NewPDB het oorspronkelijke symboolbestand en het nieuwe symboolbestand zijn en TextFile het bestand is dat in stap twee is gemaakt. De optie -f geeft aan dat bepaalde openbare symbolen moeten worden verwijderd en het ampersand ( @ ) geeft aan dat deze symbolen worden vermeld in het opgegeven tekstbestand.

    In het huidige voorbeeld ziet de opdracht er als volgt uit:

    pdbcopy c:\dir1\mysymbols.pdb c:\dir3\mysymbols.pdb -p -f:@c:\temp\listfile.txt
    

    Hiermee maakt u een nieuw symboolbestand, C:\dir3\mysymbols.pdb, which does not contain any private symbols and does not contain the two global variables you listed in listfile.txt.

Zoals in dit voorbeeld wordt weergegeven, verwijdert de -f optie van PDBCopy een specifieke lijst met openbare symbolen. De ampersand ( @ ) geeft aan dat deze symbolen worden vermeld in een tekstbestand. Een alternatieve methode is om alle symbolen op de opdrachtregel weer te geven met behulp van de optie -f zonder een ampersand. De volgende opdrachtregel is dus gelijk aan het voorbeeld in de bovenstaande procedure:

pdbcopy c:\dir1\mysymbols.pdb c:\dir3\mysymbols.pdb -p -f:_myGlobal1 -f:_myGlobal2

Tenzij u slechts één of twee symbolen wilt verwijderen, is het eenvoudiger om een tekstbestand te gebruiken dan ze op de opdrachtregel weer te geven.

Als u het merendeel van de openbare symbolen uit uw .pdb-bestand wilt verwijderen, is de -F optie de eenvoudigste methode. Hoewel u voor de -f optie deze openbare symbolen moet vermelden die u wilt verwijderen, moet u voor de -F optie deze openbare symbolen vermelden die u niet wilt verwijderen. Alle andere openbare symbolen (evenals alle persoonlijke symbolen) worden verwijderd. De optie -F ondersteunt dezelfde twee syntaxisopties als de -f optie: -F: gevolgd door de naam van een symbool dat moet worden bewaard, of -F:@ gevolgd door de naam van een tekstbestand dat een lijst met de symbolen bevat die moeten worden bewaard. In beide gevallen moeten versierde symboolnamen worden gebruikt.

Met de volgende opdracht worden bijvoorbeeld alle persoonlijke symbolen en vrijwel alle openbare symbolen verwijderd, waardoor alleen de symbolen _myFunction5 en _myGlobal7 blijven:

pdbcopy c:\dir1\mysymbols.pdb c:\dir3\mysymbols.pdb -p -F:_myFunction5 -F:_myGlobal7

Als u meerdere exemplaren van de optie -f op één regel combineert, worden alle opgegeven symbolen verwijderd. Als u meerdere exemplaren van de optie -F op één regel combineert, blijven alle opgegeven symbolen behouden en worden alle andere symbolen verwijderd. U kunt -f niet combineren met -F.

De -f- en -F-opties kunnen niet worden gebruikt zonder de optie -p, waardoor alle persoonlijke symboolgegevens worden verwijderd. Zelfs als uw oorspronkelijke bestand geen persoonlijke symbolen bevat, moet u de optie -p nog steeds opnemen (hoewel dit in dit geval geen effect heeft).

De optie -F kan niet worden gebruikt om te voorkomen dat de persoonlijke symboolgegevens worden verwijderd. Als u deze optie gebruikt met een symbool dat niet is opgenomen in de openbare symbooltabel, negeert PDBCopy deze.

Het mspdb*.dll-bestand

PDBCopy moet toegang hebben tot het Mspdb80.dll-bestand of het Mspdb60.dll-bestand om uit te voeren. PDBCopy maakt standaard gebruik van Mspdb80.dll, de versie die wordt gebruikt door Visual Studio .NET 2002 en latere versies van Visual Studio. Als uw symbolen zijn gemaakt met Visual Studio 6.0 of een eerdere versie, kunt u de -vc6 opdrachtregeloptie opgeven, zodat PDBCopy in plaats daarvan Mspdb60.dll gebruikt, hoewel dit niet vereist is. PDBCopy zoekt naar het juiste bestand, zelfs als de optie -vc6 niet wordt gebruikt. U vindt deze bestanden in uw installatie van Visual Studio, de Platform SDK of de Windows Driver Kit (WDK).

Voordat u PDBCopy uitvoert, moet u ervoor zorgen dat de juiste versie van mspdb*.dll bestand toegankelijk is voor uw computer en ervoor zorgt dat de locatie deel uitmaakt van het opdrachtpad. Als dit niet het geval is, moet u de padopdracht gebruiken om deze locatie toe te voegen aan het opdrachtpad.

De bestandshandtekening en de SymSrv-index

Elk symboolbestand heeft een vaste handtekening die het uniek identificeert. SymSrv gebruikt de handtekening om een unieke indexwaarde voor het bestand te genereren. Als twee bestanden verschillende inhoud of verschillende aanmaaktijden hebben, hebben ze ook afzonderlijke handtekeningen en afzonderlijke SymSrv-indexwaarden.

Bestanden die zijn gemaakt met PDBCopy zijn een uitzondering op de regel van unieke indexwaarden. Wanneer PDBCopy een nieuw symboolbestand maakt, heeft het dezelfde handtekening- en SymSrv-indexwaarde als het oude bestand. Met deze functie kan het ene bestand worden vervangen door het andere zonder het gedrag van hulpprogramma's met betrekking tot symbolen te wijzigen.

Als u wilt dat het nieuwe bestand een afzonderlijke handtekening en SymSrv-index heeft, gebruikt u de optie -s. In de meeste gevallen wilt u deze optie niet gebruiken, omdat het meest voorkomende gebruik van PDBCopy bestaat uit het maken van een gewijzigd symboolbestand dat het oude bestand kan vervangen zonder dat dit niet overeenkomt. Een nieuwe handtekening kan ertoe leiden dat SymSrv een andere indexwaarde toewijst aan het nieuwe bestand dan aan het oude bestand, waardoor het oude bestand niet correct kan worden vervangen.

Zie PDBCopy Command-Line Options voor de volledige opdrachtregelsyntaxis.