前言:之前介紹了利用VS2005進(jìn)行Dump文件的調(diào)試,功能非常強(qiáng)大。但VS2005是一個(gè)大程序,本文將討論利用NTSD的Command Line 實(shí)現(xiàn)Dump 文件的調(diào)試。
1、 載入DMP格式文件
利用CMD打開命令行窗口,切換到NTSD所在目錄。利用命令載入DMP文件:
ntsd –z dumpfileName –y symbolPath –srcpath sourcecodePath
dumpfileName:DMP格式文件路徑
symbolPath:PDB文件路徑
sourcecodePath:程序的源代碼路徑
如圖1.1,若載入成功,將彈出一個(gè)NTSD窗口,如圖1.2。

圖1.1 載入DMP格式文件

圖1.2 NTSD界面
紅色的圈中顯示了BUG的原因,函數(shù)IsPrefix 存在錯(cuò)誤。0x36是錯(cuò)誤相對于函數(shù)的偏移值。這個(gè)錯(cuò)誤是一個(gè)Access Violation的異常,異常地址為00401036。
Note:
l 若路徑中存在空格,需要用在路徑前后加上引號。
l 若提示錯(cuò)誤,根據(jù)提示查看是否由于dbghelp.dll不存在導(dǎo)致,安裝的調(diào)試工具包中存在該動(dòng)態(tài)庫。
2、 定位與源代碼
利用如下命令可以定位錯(cuò)誤到源代碼中:
lsp –a 500
lsa .
第一行命令用于設(shè)置顯示的源代碼行數(shù),第二行命令將錯(cuò)誤定位與錯(cuò)誤行。如圖:

圖1.3 Analysis Result: Line of Source Code Causing Crash
從圖中可以看出,第13號是導(dǎo)致程序錯(cuò)誤的位置。如果希望看到變量的值,使用命令:
x
若需要詳細(xì)查看某個(gè)變量的值,使用命令:
?? variableName

圖1.4 Analysis Result: Value of Variable Causing Crash
Module Address of Your Application(顯示程序模塊地址)
Command:
x *!

圖1.5 Application Module Information
It shows all the module address in your application.
Crash Stack Trace(顯示程序調(diào)用堆棧)
If you want to trace the stack of application, use this command:
Command:
kb

圖1.6 Application Stack Trace
It shows that function main invokes function IsPrefix then application crashes.
For more commands of NTSD, refer to debugger.chm in Microsoft Debugger Tools package.