Megosztás:


A PDBCopy használata

A PDBCopy egy parancssori eszköz, amely egy teljes szimbólumfájlból hoz létre egy csíkozott szimbólumfájlt. Más szóval egy olyan szimbólumfájlt használ, amely a privát szimbólumadatokat és a nyilvános szimbólumtáblát is tartalmazza, és létrehoz egy másolatot a fájlról, amely csak a nyilvános szimbólumtáblát tartalmazza. Attól függően, hogy mely PDBCopy-beállításokat használja, a lecsupaszított szimbólumfájl a teljes nyilvános szimbólumtáblát vagy a nyilvános szimbólumtábla egy meghatározott részhalmazát tartalmazza.

A PDBCopy helyét a WDK-ban a Telepítési könyvtár pontban találja a "Windows hibakeresési eszközei" részben.

A PDBCopy bármilyen PDB formátumú szimbólumfájllal (.pdb fájlnévkiterjesztéssel) működik, a régebbi formátumú (.dbg) szimbólumfájlokkal azonban nem.

A nyilvános szimbólumtáblák és a privát szimbólumadatok leírását a nyilvános és privát szimbólumokcímű témakörben talál.

Privát szimbólumok eltávolítása

Ha olyan csíkozott szimbólumfájlt szeretne létrehozni, amely tartalmazza az összes nyilvános szimbólumot, és egyik privát szimbólumot sem, használja a PDBCopyt három paraméterrel: az eredeti szimbólumfájl elérési útját és nevét, az új szimbólumfájl elérési útját és nevét, valamint a -p lehetőséget.

A következő parancs például létrehoz egy publicsymbols.pdb nevű új fájlt, amely ugyanazt a nyilvános szimbólumtáblát tartalmazza, mint a mysymbols.pdb, de a privát szimbólumok egyikét sem tartalmazza:

pdbcopy mysymbols.pdb publicsymbols.pdb -p

Ha a mysymbols.pdb történetesen már egy csíkozott szimbólumfájl, az új fájl és a régi fájl szimbolikus tartalma azonos lesz.

A parancs kiadása után helyezze át az új fájlt egy új helyre, és nevezze át a szimbólumfájl eredeti nevére (ebben a példában a mysymbols.pdb fájlra), mert a legtöbb hibakereső program és szimbólumkinyerési program egy adott fájlnév alapján keres szimbólumokat. Másik lehetőségként használhatja ugyanazt a fájlnevet a bemeneti fájlhoz és a kimeneti fájlhoz a PDBCopy parancssorában, ha különböző könyvtárak vannak megadva:

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

Megjegyzés A célfájl nem létezhet a PDBCopy futtatása előtt. Ha létezik ilyen nevű fájl, különböző hibák léphetnek fel.

Privát szimbólumok és kijelölt nyilvános szimbólumok eltávolítása

Ha nem csak a privát szimbólumok adatait szeretné eltávolítani, hanem csökkenteni szeretné a nyilvános szimbólumtáblában lévő információk mennyiségét is, a -f beállítással megadhatja az eltávolítandó nyilvános szimbólumok listáját.

Az alábbi példa a következő eljárást szemlélteti:

  1. Határozza meg az eltávolítani kívánt szimbólumok teljes nevét, beleértve a díszítéseket is. Ha nem biztos a díszített szimbólumnevekben, a DBH eszközzel határozhatja meg őket. Részletekért tekintse meg egy adott szimbólum díszítésének meghatározása című témakört. Ebben a példában tegyük fel, hogy az eltávolítani kívánt szimbólumok díszített nevei _myGlobal1 és _myGlobal2.

  2. Hozzon létre egy szövegfájlt, amely tartalmazza az eltávolítandó szimbólumok listáját. A fájl minden sorának tartalmaznia kell egy szimbólum nevét, beleértve a dekorációkat is, de a modulneveket nem. Ebben a példában a fájl a következő két sort tartalmazza:

    _myGlobal1
    _myGlobal2
    

    A fájl tetszőleges nevet megadhat. Tegyük fel, hogy ezt a fájlt listfile.txt elnevezzük, és a C:\Temp könyvtárba helyezzük.

  3. Használja a következő PDBCopy parancssort:

    pdbcopy OldPDB NewPDB -p -f:@TextFile
    

    ahol OldPDB és NewPDB az eredeti szimbólumfájl és az új szimbólumfájl, és TextFile a második lépésben létrehozott fájl. A -f beállítás azt jelzi, hogy bizonyos nyilvános szimbólumokat el kell távolítani, az ampersand ( @ ) pedig azt jelzi, hogy ezek a szimbólumok szerepelnek a megadott szövegfájlban.

    Az aktuális példában a parancs a következőhöz hasonlóan nézne ki:

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

    Ezzel létrehoz egy új szimbólumfájlt, C:\dir3\mysymbols.pdb, which does not contain any private symbols and does not contain the two global variables you listed in listfile.txt.

Ahogy az ebben a példában látható, a PDBCopy -f lehetősége eltávolítja a nyilvános szimbólumok adott listáját. Az ampersand ( @ ) azt jelzi, hogy ezek a szimbólumok egy szövegfájlban vannak felsorolva. Egy másik módszer az összes szimbólum felsorolása a parancssorban, a -f lehetőséggel, ampersand nélkül. Így a következő parancssor egyenértékű a fenti eljárás példájával:

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

Ha csak egy vagy két szimbólumot szeretne eltávolítani, egyszerűbb szövegfájlt használni, mint a parancssorban listázni őket.

Ha el szeretné távolítani a nyilvános szimbólumok többségét a .pdb fájlból, a -F lehetőség a legegyszerűbb módszer. Bár a -f beállításhoz fel kell sorolnia az eltávolítani kívánt nyilvános szimbólumokat, a -F beállításhoz fel kell sorolnia azokat a nyilvános szimbólumokat, amelyeket nem szeretne eltávolítani. Az összes többi nyilvános szimbólum (valamint az összes privát szimbólum) törlődik. A -F beállítás ugyanazt a két szintaxisbeállítást támogatja, mint a -f beállítás: -F: és a megőrzendő szimbólum neve, vagy -F:@, amelyet a megőrzendő szimbólumok listáját tartalmazó szövegfájl neve követ. Mindkét esetben díszített szimbólumneveket kell használni.

Az alábbi parancs például eltávolítja az összes privát szimbólumot és szinte az összes nyilvános szimbólumot, így csak a szimbólumok _myFunction5 és _myGlobal7maradnak:

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

Ha a -f beállítás több példányát egyesít egy sorban, az összes megadott szimbólum el lesz távolítva. Ha a -F beállítás több példányát egyesít egy sorban, az összes megadott szimbólum megmarad, és az összes többi szimbólum el lesz távolítva. A -f nem kombinálható az -F billentyűvel.

A -f és -F beállítások nem használhatók a -p beállítás nélkül, amely eltávolítja az összes privát szimbólumadatot. Még ha az eredeti fájl nem tartalmaz privát szimbólumokat, akkor is tartalmaznia kell a -p beállítást (bár ebben az esetben nincs hatása).

A -F beállítás nem használható a privát szimbólumadatok eltávolításának megakadályozására. Ha ezt a lehetőséget olyan szimbólummal használja, amely nem szerepel a nyilvános szimbólumtáblában, a PDBCopy figyelmen kívül hagyja azt.

Az mspdb*.dll fájl

A PDBCopy-nak vagy a Mspdb80.dll fájlhoz vagy a Mspdb60.dll fájlhoz kell hozzáférnie a futtatáshoz. A PDBCopy alapértelmezés szerint a Visual Studio .NET 2002 és újabb verziói által használt Mspdb80.dllhasznál. Ha a szimbólumok a Visual Studio 6.0-val vagy egy korábbi verzióval készültek, megadhatja a -vc6 parancssori beállítást, hogy a PDBCopy ehelyett Mspdb60.dll használjon, bár erre nincs szükség. A PDBCopy akkor is megkeresi a megfelelő fájlt, ha a -vc6 beállítást nem használja. Ezeket a fájlokat a Visual Studio, a Platform SDK vagy a Windows Driver Kit (WDK) telepítésében találja.

A PDBCopy futtatása előtt győződjön meg arról, hogy az mspdb*.dll fájl megfelelő verziója elérhető a számítógép számára, és győződjön meg arról, hogy a hely a parancs elérési útjának része. Ha nem, akkor a elérési út parancs használatával vegye fel ezt a helyet a parancs elérési útvonalába.

A fájl aláírása és a SymSrv index

Minden szimbólumfájlhoz rögzített aláírás tartozik, amely egyedileg azonosítja azt. A SymSrv az aláírással egyedi "indexértéket" hoz létre a fájlhoz. Ha két fájl tartalma vagy létrehozási ideje eltérő, akkor külön aláírásokkal és eltérő SymSrv-indexértékekkel is rendelkeznek.

A PDBCopyval létrehozott fájlok kivételt képeznek az egyedi indexértékek szabálya alól. Amikor a PDBCopy létrehoz egy új szimbólumfájlt, ugyanazzal az aláírással és SymSrv index értékkel rendelkezik, mint a régi fájl. Ez a funkció lehetővé teszi az egyik fájl cseréjét a másikra a szimbólumokkal kapcsolatos eszközök viselkedésének módosítása nélkül.

Ha azt szeretné, hogy az új fájl különálló aláírással és SymSrv-indexgel rendelkezzen, használja a -s lehetőséget. A legtöbb esetben nem szeretné használni ezt a lehetőséget, mivel a PDBCopy leggyakoribb használata egy módosított szimbólumfájl létrehozása, amely a régi fájlt helyettesítheti anélkül, hogy eltérést okoz. Az új aláírás miatt a SymSrv más indexértéket rendelhet az új fájlhoz, mint a régi fájlhoz, megakadályozva, hogy az új fájl megfelelően cserélje le a régit.

A teljes parancssori szintaxisért lásd PDBCopy Command-Line Beállítások.