查找symbols和source

来源:互联网 发布:果冻市场数据 编辑:程序博客网 时间:2024/05/20 15:11

明确的设置symbols所在的地方,使用.sympath命令。在命令窗口中中断(CTRL-BREAK)然后输入:

.sympath SRV*<DownstreamStore>*http://msdl.microsoft.com/download/symbols

以便告诉WinDbgMicrosoft公开的symbols服务器上查找symbols。让WinDbg使用该服务以及在本地保存一份已下载的symbols。例如,在D:/DebugSymbols,你应该这么做:

.sympath SRV*d:/DebugSymbols*http://msdl.microsoft.com/download/symbols

你偶尔会在symbols服务器上获取symbols时遇到一些故障。在这个情况下,使用!sym noisy 命令以获得关于WinDbg尝试获取symbols的更多信息。然后使用 !lmi 查看WinDbg知道多少关于ntoskrnl的信息。然后尝试取得ntoskrnlsymbols,使用.reload /f因而:

kd> !sym noisy

noisy mode - symbol prompts on

 

kd> !lmi nt

Loaded Module Info: [nt]

         Module: ntoskrnl

   Base Address: 80a02000

     Image Name: ntoskrnl.exe

   Machine Type: 332 (I386)

     Time Stamp: 3e80048b Mon Mar 24 23:26:03 2003

           Size: 4d8000

       CheckSum: 3f6f03

Characteristics: 10e 

Debug Data Dirs: Type  Size     VA  Pointer

             CODEVIEW    25,  ee00,    e600 RSDS - GUID: (0xec9b7590, 0xd1bb, 0x47a6, 0xa6, 0xd5, 0x38, 0x35, 0x38, 0xc2, 0xb3, 0x1a)

               Age: 1, Pdb: ntoskrnl.pdb

     Image Type: MEMORY   - Image read successfully from loaded memory.

    Symbol Type: EXPORT   - PDB not found

    Load Report: export symbols

输出symbols通常很大。WINDOWS调试工具包括一个symbol服务器,以便连接到Microsoft的网络服务器保存这些公开的symbol。添加这些到你的symbol路径,然后加载它们:

kd> .sympath SRV*d:/DebugSymbols*http://msdl.microsoft.com/download/symbols

Symbol search path is: SRV*d:/ DebugSymbols *http://msdl.microsoft.com/download/symbols

kd> .reload /f nt

SYMSRV:  //symbols/symbols/ntoskrnl.pdb/EC9B7590D1BB47A6A6D5383538C2B31A1/file.ptr

SYMSRV:  ntoskrnl.pdb from //symbols/symbols: 9620480 bytes copied        

DBGHELP: nt - public symbols

         d:/DebugSymbols/ntoskrnl.pdb/EC9B7590D1BB47A6A6D5383538C2B31A1/ntoskrnl.pdb

kd> !lmi nt

Loaded Module Info: [nt]

         Module: ntoskrnl

   Base Address: 80a02000

     Image Name: ntoskrnl.exe

   Machine Type: 332 (I386)

     Time Stamp: 3e80048b Mon Mar 24 23:26:03 2003

           Size: 4d8000

       CheckSum: 3f6f03

Characteristics: 10e 

Debug Data Dirs: Type  Size     VA  Pointer

             CODEVIEW    25,  ee00,    e600 RSDS - GUID: (0xec9b7590, 0xd1bb, 0x47a6, 0xa6, 0xd5, 0x38, 0x35, 0x38, 0xc2, 0xb3, 0x1a)

               Age: 1, Pdb: ntoskrnl.pdb

     Image Type: MEMORY   - Image read successfully from loaded memory.

    Symbol Type: PDB      - Symbols loaded successfully from symbol server.

                 d:/DebugSymbols/ntoskrnl.pdb/EC9B7590D1BB47A6A6D5383538C2B31A1/ntoskrnl.pdb

       Compiler: C - front end [13.10 bld 2179] - back end [13.10 bld 2190]

    Load Report: public symbols

                 d:/DebugSymbols/ntoskrnl.pdb/EC9B7590D1BB47A6A6D5383538C2B31A1/ntoskrnl.pdb

symbols只会给你一些信息,而不会提供源代码。在最简单的情况下,在它们被建立的时候,source文件便在同一个地方(该位置包括2进制文件和symbol文件)。但是在大多数情况下,你不能在那里找到它们(它们可能被移走了),你必须指定在哪里能找到它们。这时,你需要一个源路径,例如,

.srcpath e:/Win2003SP1

它的意思是:想要source文件,请查看e:/Win2003SP1目录。

另一个解决方案是命名一个source服务器,如果你有:

.srcpath //MySrcServer

如果你曾经在获取source文件时遇到麻烦,使用.srcnoisy 1以取得更多关于调试器查找它们的信息。

原创粉丝点击