ntsd调试dump文件

来源:互联网 发布:曲靖哪里有卖网络机柜 编辑:程序博客网 时间:2024/04/28 17:51

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。

Load

 

 

 

图1.1 载入DMP格式文件

Ntsd

图1.2 NTSD界面

红色的圈中显示了BUG的原因,函数IsPrefix 存在错误。0x36是错误相对于函数的偏移值。这个错误是一个Access Violation的异常,异常地址为00401036

Note

l  若路径中存在空格,需要用在路径前后加上引号。

l  若提示错误,根据提示查看是否由于dbghelp.dll不存在导致,安装的调试工具包中存在该动态库。

2、  定位与源代码

利用如下命令可以定位错误到源代码中:

lsp  –a 500

lsa  .

第一行命令用于设置显示的源代码行数,第二行命令将错误定位与错误行。如图:

lsp lsa

图1.3 Analysis Result: Line of Source Code Causing Crash

从图中可以看出,第13号是导致程序错误的位置。如果希望看到变量的值,使用命令:

x

若需要详细查看某个变量的值,使用命令:

??  variableName

variable

图1.4 Analysis Result: Value of Variable Causing Crash

 

Module Address of Your Application(显示程序模块地址)

Command:

x *!

Module

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

stack track

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.


原创粉丝点击