ntsd调试dump文件
ntsd生成dump文件:
在Linux下,如果有內存訪問異常等問題,可以生成core文件,協助開發人員定位問題所在。那么在Windows下,出現類似問題怎么辦?其實Windows下也有類似的命令行工具——ntsd,可以用來生成dump文件,然后使用WinDbg進行分析。
??????? ntsd的生成dump文件的方式為:?ntsd?-pv?-p??$PID?? -c? ".dump?/mf?? d:\aaa.dmp"。
??? ????或者,先是ntsd -pv -p $PID進入交互式命令提示,然后再輸入.dump /mf d:\aaa.dmp
??? ??? 其中$PID,是進程的PID,需要從任務管理器中查到。
NTSD(Command Line)調試DMP格式文件:
前言:之前介紹了利用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.
總結
以上是生活随笔為你收集整理的ntsd调试dump文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 谁那有.net的仿QQ爱墙的程序?
- 下一篇: linux shell 求绝对值