Hogyan használd a SymChk-t

A SymChk alapszintaxisa a következő:

symchk [/r] FileNames /s SymbolPath 

A FileNames egy vagy több olyan programfájlt határoz meg, amelynek szimbólumára szükség van. Ha a FileNames egy könyvtár, és az /r jelzőt használja, a rendszer rekurzívan vizsgálja meg ezt a könyvtárat, és a SymChk megpróbálja megtalálni a könyvtárfa összes programfájljának szimbólumait. A SymbolPath megadja, hogy a SymChk hol keres szimbólumokat.

Több parancssori lehetőség is van. A teljes listaelemért tekintse meg a SymChk Command-Line Beállításai című témakört.

Symchk beszerzése

A Symchk, más hibakereső eszközökhöz hasonlóan, a hibakereső csomag részeként kerül forgalomba. További információ: Hibakeresési eszközök Windows.

A hibakeresési eszközök telepítése után a Symchk elérhető ebben a könyvtárban a 64 bites Windowshoz.

C:\Program Files (x86)\Windows Kits\10\Debuggers\x64

Használati példa

A megadott szimbólum elérési útja tetszőleges számú helyi könyvtárat, UNC-könyvtárat vagy szimbólumkiszolgálót tartalmazhat. A helyi könyvtárak és az UNC könyvtárak nem keresnek rekurzívan. A rendszer csak a megadott könyvtárat és a végrehajtható bővítményen alapuló alkönyvtárat keresi. Például a lekérdezés

symchk thisdriver.sys /s G:\symbols 

Megkeresi a G:\mysymbols és G:\mysymbols\sys mappákat.

A szimbólumkiszolgálót az alábbi szintaxisok egyikével adhatja meg a szimbólum elérési útjának részeként:

srv*DownstreamStore*\\Server\Share
srv*\\Server\Share

Ez nagyon hasonló a hibakereső szimbólumútvonalában történő szimbólumkiszolgáló használatához. Erről további információt a Szimbólumkiszolgálók és szimbólumtárolók használata című témakörben talál.

Ha egy alsóbb rétegbeli tároló van megadva, a SymChk másolatot készít a szimbólumkiszolgáló által talált összes érvényes szimbólumfájlról, és azokat az alsóbb rétegbeli tárolóba helyezi. A program csak a teljes egyezéseket tartalmazó szimbólumfájlokat másolja az alsóbb rétegbe.

A SymChk mindig az alsóbb rétegbeli tárolóban keres, mielőtt lekérdezi a szimbólumkiszolgálót. Ezért óvatosnak kell lennie egy alsóbb rétegbeli tároló használatával, amikor valaki más tartja karban a szimbólumtárolót. Ha egyszer futtatja a SymChk-et, és megtalálja a szimbólumfájlokat, azokat az alsóbb rétegbeli tárolóba másolja. Ha ezután újra futtatja a SymChk-et, miután ezek a fájlok módosultak vagy törölve lettek a szimbólumtárolóban, a SymChk nem fogja észrevenni ezt a tényt, mivel megtalálja, amit keres az alsóbb rétegbeli tárolóban, és nem keres tovább.

Jegyzet A SymChk mindig a SymSrv (Symsrv.dll) szimbólumkiszolgáló DLL-jét használja. A hibakeresők azonban a SymSrv-en kívül más szimbólumkiszolgálói DLL-t is választhatnak, ha van ilyen. (A SymSrv a Windows hibakeresési eszközei csomagban található szimbólumkiszolgáló.)

A SymChk használata annak meghatározásához, hogy a szimbólumok privátak vagy nyilvánosak-e

Annak megállapításához, hogy egy szimbólumfájl privát vagy nyilvános-e, használja a /v paramétert, hogy a SymChk részletes kimenetet jelenítsen meg. Tegyük fel, hogy MyApp.exe és a MyApp.pdb a c:\sym mappában található. Adja meg ezt a parancsot.

symchk /v C:\sym\MyApp.exe /s C:\sym**

Ha a MyApp.pdb privát szimbólumokat tartalmaz, a SymChk kimenete így néz ki.

[SYMCHK] Searching for symbols to c:\sym\MyApp.exe in path c:\sym
...
DBGHELP: MyApp - private symbols & lines
        c:\sym\MyApp.pdb
...
SYMCHK: FAILED files = 0
SYMCHK: PASSED + IGNORED files = 1

Ha a MyApp.pdb csak nyilvános szimbólumokat tartalmaz, a SymChk kimenete így néz ki.

[SYMCHK] Searching for symbols to c:\sym\MyApp.exe in path c:\sym
...
DBGHELP: MyApp - public symbols
        c:\sym\MyApp.pdb
...
SYMCHK: FAILED files = 0
SYMCHK: PASSED + IGNORED files = 1

Ha korlátozni szeretné a keresést, hogy csak nyilvános szimbólumfájlokat találjon, használja az s lehetőséget az /s paraméterrel (/ss). Az alábbi parancs talál egyezést, ha a MyApp.pdb csak nyilvános szimbólumokat tartalmaz. Nem talál egyezést, ha a MyApp.pdb privát szimbólumokat tartalmaz.

symchk /v C:\sym\MyApp.exe /s C:\sym

További információ: Nyilvános és privát szimbólumok.

példák

Íme néhány példa. A Myapp.exeprogramhoz az alábbi parancs szimbólumokat keres:

E:\debuggers> symchk F:\myapp.exe /s F:\symbols\applications 

SYMCHK: Myapp.exe           FAILED  - Myapp.pdb is missing

SYMCHK: FAILED files = 1
SYMCHK: PASSED + IGNORED files = 0

Próbálkozzon újra egy másik szimbólumútvonallal:

E:\debuggers> symchk F:\myapp.exe /s F:\symbols\newdirectory 

SYMCHK: FAILED files = 0
SYMCHK: PASSED + IGNORED files = 1

A keresés ezúttal sikeres volt. Ha a részletes beállítást nem használja, a SymChk csak azokat a fájlokat listázja, amelyekhez nem talált szimbólumokat. Ebben a példában tehát egyetlen fájl sem szerepel a listán. Megállapíthatja, hogy a keresés sikeres volt, mert most már egy fájl szerepel az "átadott" kategóriában, és egyik sem a "sikertelen" kategóriában.

A programfájl figyelmen kívül lesz hagyva, ha nem tartalmaz végrehajtható kódot. Sok erőforrásfájl ilyen típusú.

Ha az összes programfájl fájlnevét szeretné látni, a /v beállítással részletes kimenetet hozhat létre:

E:\debuggers> symchk /v F:\myapp.exe /s F:\symbols\newdirectory 

SYMCHK: MyApp.exe           PASSED

SYMCHK: FAILED files = 0
SYMCHK: PASSED + IGNORED files = 1

Az alábbi parancs rengeteg Windows-szimbólumot keres egy szimbólumkiszolgálón. Számos lehetséges hibaüzenet érhető el:

E:\debuggers> symchk /r C:\windows\system32 /s srv*\\manysymbols\windows 

SYMCHK: msisam11.dll         FAILED  - MSISAM11.pdb is missing
SYMCHK: msuni11.dll          FAILED  - msuni11link.pdb is missing
SYMCHK: msdxm.ocx            FAILED  - Image is split correctly, but msdxm.dbg i
s missing
SYMCHK: expsrv.dll           FAILED  - Checksum doesn't match with expsrv.DBG
SYMCHK: imeshare.dll         FAILED  - imeshare.opt.pdb is missing
SYMCHK: ir32_32.dll          FAILED  - Built with no debugging information
SYMCHK: author.dll           FAILED  - rpctest.pdb is missing
SYMCHK: msvcrt40.dll         FAILED  - Built with no debugging information
......
SYMCHK: FAILED files = 211
SYMCHK: PASSED + IGNORED files = 4809

Lásd még:

SymChk Command-Line beállításai

Szimbólumkiszolgálók és szimbólumtárolók használata