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

圖1.1 載入DMP格式文件

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

圖1.3 Analysis Result: Line of Source Code Causing Crash
從圖中可以看出,第13號是導致程序錯誤的位置。如果希望看到變量的值,使用命令:
x
若需要詳細查看某個變量的值,使用命令:
?? 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(顯示程序調用堆棧)
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.