如何確認 Windows 偵錯符號

文章翻譯 文章翻譯
文章編號: 148660 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

結論

Windows 偵錯符號必須經過驗證之後啟動核心偵錯工具 (I386kd.exe | Windbg.exe)。偵錯工具可能會載入和顯示一個提示但是如果符號不正確的未來的偵錯命令不引用適當的函式和通往偶發結果的變數。下列是幾個紅色標幟和幾個符號的特別色檢查有效性的方法。

其他相關資訊

本文假設核心偵錯工具正在執行和已載入 Memory.dmp 檔案,或連接至遠端機器。所呈現的指令不完整記錄,而且只從輸出的摘錄列示如下。

文件內容

  • 正在載入核心偵錯工具
  • 檢查與建立時間! 驅動程式
  • 使用 link.exe 檢查建立時間
  • unassembling 函式
  • Service Pack 符號

正在載入核心偵錯工具

正常載入的核心偵錯工具會顯示下列提示的其中一個:
kd > 單一處理器系統

0: kd > 多處理器系統
下面顯示提示指出 Ntoskrnl.exe 檔案的符號檔是不正確。請檢查以確定適當的多處理器或單一處理器核心和 HAL 會複製到 [符號] 樹狀目錄。

範例:
Symbol search path is: C:\symbols
kd: crash dump initialized [c:\dump\memory.dmp]
could not determine the current processor, using zero
Kernel Version 1057 Free loaded @ 0x80100000
Bugcheck 0000001e : c0000005 80151d5b 00000000 00000001
*** Contents Deleted ***
16kd>
				
核心偵錯工具時載入 Memory.dmp 檔案之核心版本,以及處理器計數會顯示在前幾行。 請確認與適當的核心和 HAL 對應處理器計數。當任一個符號會載入或延後,會顯示驅動程式符號資訊。

範例負載:
Symbol search path is: C:\symbols
kd: crash dump initialized [c:\dump\memory.dmp]
Kernel Version 1057 Free loaded @ 0x80100000
Bugcheck 0000001e : c0000005 80151d5b 00000000 00000001
re-loading all kernel symbols
KD: unloading symbols for "ntoskrnl.exe"
KD: deferring symbol load for "ntoskrnl.exe" at 80100000
KD: Loaded (2248) fpo entries for image (ntoskrnl.exe)
KD: "ntoskrnl.exe" loaded 4074 symbols (80100000-801bbb80)
KD: loaded symbols for "ntoskrnl.exe"
KD: deferring symbol load for "atapi.sys" at fc810000
KD: deferring symbol load for "diskdump.sys" at fc800000
KD: deferring symbol load for "hal.dll" at 80400000
KD: deferring symbol load for "atapi.sys" at 80010000
KD: deferring symbol load for "SCSIPORT.SYS" at 80013000
KD: deferring symbol load for "Atdisk.sys" at 80001000
KD: deferring symbol load for "Scsidisk.sys" at 8001b000
KD: deferring symbol load for "Fastfat.sys" at 80372000
Unable to read image header for Floppy.SYS at fc820000 - status c0000001
*** Contents Deleted ***
KD: deferring symbol load for "srv.sys" at fc9e0000
KD: deferring symbol load for "ntdll.dll" at 77f80000
finished re-loading all kernel symbols
NT!_PspUnhandledExceptionInSystemThread+0x18:
80131ff8 b801000000       mov     eax,0x1
kd>
				
注意核心偵錯工具已 「 無法在 fc820000-狀態 c0000001 為 Floppy.sys 讀取映像標頭 」。此訊息是正常的因為特定的驅動程式標頭目前不在記憶體中。

檢查與建立時間! 驅動程式

使用 ! 驅動程式 命令來列出驅動程式目前載入記憶體中。請記下日期和時間的驅動程式,並且它們無法載入。 (程式碼大小] 及 [資料大小資料行,在下列範例會移除根據發行項的寬度)。
kd> !drivers
Base       Code Size Data Size  Driver Name        Creation Time
80100000                       Ntoskrnl.exe   Fri May 26 18:18:36 1995
80400000                            Hal.dll   Thu May 11 13:54:18 1995
80010000                          Atapi.sys   Tue May 23 21:01:41 1995
80013000                       Scsiport.sys   Fri May 05 23:11:06 1995
80001000                         Atdisk.sys   Fri May 05 23:10:40 1995
8001b000                       Scsidisk.sys   Fri May 05 23:11:01 1995
80372000                        Fastfat.sys   Mon May 22 23:57:13 1995
fc820000                         Floppy.sys   Header Paged Out
fc830000                       Scsicdrm.sys   Wed May 10 21:57:03 1995
fc840000                         Fs_Rec.sys   Header Paged Out
fc850000                           Null.sys   Header Paged Out
fc860000                           Beep.sys   Header Paged Out
fc870000                       I8042prt.sys   Fri May 05 23:10:42 1995
fc880000                       Mouclass.sys   Fri May 05 23:10:45 1995
fc890000                       Kbdclass.sys   Fri May 05 23:10:44 1995
fc8b0000                       Videoprt.sys   Fri May 05 23:10:05 1995
fc8a0000                             S3.sys   Fri May 19 21:18:06 1995
fc8c0000                            Vga.sys   Fri May 05 23:10:10 1995
fc8d0000                           Msfs.sys   Fri May 05 23:11:57 1995
fc8e0000                           Npfs.sys   Fri May 05 23:11:40 1995
fc900000                           Ndis.sys   Mon May 22 20:23:18 1995
fc8f0000                          El59x.sys   Fri Feb 10 16:18:09 1995
fc940000                            Tdi.sys   Fri May 05 23:13:09 1995
fc920000                            Nbf.sys   Mon May 08 15:00:47 1995
fc950000                        Netbios.sys   Fri May 05 23:13:19 1995
fc960000                        Parport.sys   Header Paged Out
fc970000                       Parallel.sys   Header Paged Out
fc980000                         Serial.sys   Fri May 05 23:11:20 1995
fc990000                            Afd.sys   Header Paged Out
fc9a0000                            Rdr.sys   Wed May 17 17:18:16 1995
fc9e0000                            Srv.sys   Wed May 24 21:56:59 1995
TOTAL:   1ab460 (1709 kb)  3b7c0 ( 237 kb) (    0 kb     0 kb)
kd>
				
注意建立時間的檔案是編譯該檔案的日期。此日期是接近實際的檔案上 「 Date\Time 戳記檢視 Winnt\System32\Drivers 子資料夾,使用 「 檔案管理員 」 時。

如果您訂閱 Microsoft 開發人員網路 (MSDN),或是有 Windows 裝置驅動程式套件 (DDK),工具可用來確認的 Link.exe Dbg 是相同時編譯驅動程式所建立的檔案。"時間日期戳記 」 在下面範例符合於 「 建立時間 」 的 Netbios.sys 上述輸出中。

使用 Link.exe 來檢查 「 時間日期戳記"Dbg 檔案的:
LINK-傾印-標頭 \symbols\sys\netbios.dbg
Microsoft (R) COFF 二進位檔傾印工具版本 3.00.5270
著作權 (C) Microsoft Corp 1992 1995年。本電腦程式著作。

傾印檔案 Netbios.dbg 的
4944 簽章
0 的旗標
14 C 機器 (i386)
306 特性
2FAAE94F 時間日期戳記 05 星期五五月 23: 13: 19 1995年
8D0B 總和檢查碼的影像

10000 的基底的影像

70A0 大小的影像
貴刪除內容貴

如果 ! 驅動程式 命令會產生如下所示的任何一行、 一個重要的資料表在傾印已損毀。可能可以有進一步的分析傾印。
無法在 0583002a-狀態讀取 DosHeader 00000000
無法在 0587002a-狀態 00000000 讀取 DosHeader
無法在 0588002a-狀態 00000000 讀取 DosHeader
無法在 058a002a-狀態 00000000 讀取 DosHeader
無法在 058c002a-狀態 00000000 讀取 DosHeader

unassembling 函式

符號檔啟用核心偵錯工具依名稱參考函式和全域變數。特別色檢查幾個 unassembled 函式,以確定它們看起來適當。許多函式是編譯器最佳化並不一定符合到下面的範例。編譯器最佳化函式以函式名稱的括號中 FPO 來識別。

函式通常開始與任一 」 發送 ebp"或"mov eax,層級會向 [000000000]"基本知識的機器語言和經驗會啟用一項來辨識這些函式。
  • 列出已載入的模組
    x *!
  • 清單 (如範例為 Ntoskrnl.exe) 的特定模組的符號。
    x NT! *
  • 選取要反向組也就是譯編譯器最佳化的函數。
    u NT! _NtUnlockFile

良好的符號

kd> u NT!_NtUnlockFile
u NT!_NtUnlockFile
NT!_NtUnlockFile:
80156bd8 64a100000000     mov     eax,fs:[00000000]
80156bde 55               push    ebp
80156bdf 8bec             mov     ebp,esp
80156be1 6aff             push    0xff
80156be3 68200d1080       push    0x80100d20
80156be8 68304f1380       push    0x80134f30
80156bed 50               push    eax
80156bee 64892500000000   mov     fs:[00000000],esp
kd>
				
函式的 unassembly 看起來應該類似上述文字 ; 不過,unassembly 若有變更。如果 unassembly 看起來適當,您可以假設此模組的符號已經正確載入。

下列 unassembly 開頭"jnz NT! _NTUnlockFile + 0x22" 很明顯地,一個函式的開頭不會以跳躍指令碼開頭。再次檢查 [符號] 樹狀目錄。

不正確的符號

kd> u NT!_NTUnlockFile
u NT!_NTUnlockFile
NT!_NtUnlockFile:
801574a4 7520             jnz     NT!_NtUnlockFile+0x22 (801574c6)
801574a6 6a00             push    0x0
801574a8 8d45dc           lea     eax,[ebp-0x24]
801574ab 50               push    eax
801574ac 53               push    ebx
801574ad ff356c361480     push    dword ptr [NT!_CcNoDelay+0x4 (8014366c)]
801574b3 6a01             push    0x1
801574b5 ff7508           push    dword ptr [ebp+0x8]
				

Service Pack 符號

但有時很難符合特定的安裝符號時也會發生。在某個時間點,服務已經可以加入所需從 Service Pack 與已更新的檔案複製 Windows 安裝光碟複製檔案。請務必重新套用 Service Pack 及任何協力廠商支援磁片後變更系統安裝程式會從 Windows 安裝光碟片複製檔案。符號應該以作為安裝相同的順序套用。

其他資訊

若要到發行項核心偵錯 How To 系列搜尋關鍵字: debugref。

Windbg 2.0.x 符號技術

在偵錯工具版本 2.0.x 和 Microsoft 偵錯工具的較大有可用的額外符號驗證步驟。如需詳細資訊,請參閱以下列 Microsoft 網站:
Drivers Development Kit

屬性

文章編號: 148660 - 上次校閱: 2009年3月4日 - 版次: 5.0
這篇文章中的資訊適用於:
  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Professional Edition
  • Microsoft Windows 2000 Datacenter Server
  • Microsoft Windows NT Workstation 3.5
  • Microsoft Windows NT Workstation 3.51
  • Microsoft Windows NT Server 3.5
  • Microsoft Windows NT Server 3.51
  • Windows Server 2008 for Itanium-Based Systems
  • Windows Server 2008 R2 Datacenter
  • Windows Server 2008 R2 Enterprise
  • Windows Server 2008 R2 Standard
  • Windows Server 2008 Datacenter
  • Windows Server 2008 Enterprise
  • Windows Server 2008 Standard
  • Microsoft Windows Server 2003 R2 Datacenter Edition (32-Bit x86)
  • Microsoft Windows Server 2003 R2 Datacenter x64 Edition
  • Microsoft Windows Server 2003 R2 Enterprise Edition (32-Bit x86)
  • Microsoft Windows Server 2003 R2 Enterprise x64 Edition
  • Microsoft Windows Server 2003 R2 Standard Edition (32-bit x86)
  • Microsoft Windows Server 2003 R2 Standard x64 Edition
  • Microsoft Windows Server 2003, Datacenter Edition (32-bit x86)
  • Microsoft Windows Server 2003, Datacenter Edition for Itanium-Based Systems
  • Microsoft Windows Server 2003, Datacenter x64 Edition
  • Microsoft Windows Server 2003, Enterprise x64 Edition
  • Microsoft Windows Server 2003, Enterprise Edition (32-bit x86)
  • Microsoft Windows Server 2003, Enterprise Edition for Itanium-based Systems
  • Microsoft Windows Server 2003, Standard x64 Edition
  • Microsoft Windows Server 2003, Standard Edition (32-bit x86)
  • Microsoft Windows Small Business Server 2003 R2 Premium Edition
  • Microsoft Windows Small Business Server 2003 R2 Standard Edition
  • Microsoft Windows Small Business Server 2003, Premium Edition Service Pack 1 (SP1)
  • Microsoft Windows Small Business Server 2003 Standard Edition
  • Windows Essential Business Server 2008 Standard
  • Microsoft Windows XP 64-Bit Edition Version 2002
  • Microsoft Windows XP 64-Bit Edition Version 2003
  • Microsoft Windows XP Home Edition (家用版)
  • Microsoft Windows XP Home Edition N
  • Microsoft Windows XP Professional
  • Microsoft Windows XP Professional 64-Bit Edition (Itanium)
  • Microsoft Windows XP Professional 64-Bit Edition (Itanium) 2003
  • Microsoft Windows XP Professional N
  • Microsoft Windows XP Professional x64 Edition
  • Windows Vista 商用進階 64 位元版
  • Windows Vista 家用入門 64 位元版
  • Windows Vista 家用進階 64 位元版
  • Windows Vista 旗艦 64 位元版
  • Windows 7 Beta
  • Windows Vista 商用入門版
  • Windows Vista 商用入門 64 位元版
  • Windows Vista Business N
  • Windows Vista Business N 64-bit Edition
  • Windows Vista 商用進階版
  • Windows Vista 家用入門版
  • Windows Vista Home Basic N
  • Windows Vista Home Basic N 64-bit Edition
  • Windows Vista 家用進階版
  • Windows Vista 旗艦版
關鍵字:?
kbmt kbinfo KB148660 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:148660
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com