Windbg调试软件系统崩溃

来源:互联网 发布:vb中and和or的优先级 编辑:程序博客网 时间:2024/04/27 22:41

 一、Windbg简介

WinDBG是一个非常强大的调试器,它设计了极其丰富的功能来支持各种调试任务,包括用户态调试,内核态调试,调试转储文件,远程调试等。WinDBG具有非常大的灵活性和可扩展性,用来满足各种各样的调试需求,比如用户可以自由定义调试事件的处理方式,编写调试扩展模块来定制和补充WinDBG的调试功能。

尽管WinDBG是个典型的窗口程序,但是它的大多数调试功能还是以手工输入命令的方式来工作。WinDBG提供了20多条标准命令,140多条元命令,和大量扩展命令,学习和灵活使用这些命令是学习WinDBG的关键,也是难点。 

二、WinDBG配置

1.配置WinDBG软件标识路径

(1)打开WinDBG软件,如下图所示。

(2)点击File菜单,选择Symbol File Path菜单项,在弹出的对话框中输入WinDBG标识的路径,如下图所示。

(3)输入以上符号路径后,点击OK,设置完成。

 

2.配置WinDBG软件搜索代码路径

(1)点击File菜单,选择Source Search Path菜单项,在弹出的对话框中输入要进行调试系统的代码路径(代码设置的路径到解决方法一级),如下图所示。

(3)输入代码路径后,点击OK,设置完成。

 

二、WinDBG调试系统

1.系统崩溃识别

当发生系统崩溃时,不要急着关掉程序或关掉提示对话框,系统崩溃时的状况如下图所示。

 

2.打开WinDBG与崩溃的系统进行链接

(1)打开WinDBG软件,并确认是否正确设置标识和代码搜索路径,点击File菜单,选择Attach to a Process菜单项,如下图所示。

(2)在弹出的对话框中选择要调试的系统进程,如下图所示。

       (3)此时WinDBG进入用户态调试,如下图所示。

3.输入命令进行调试

       (1)Command窗口下输入:~* kb并点击回车键,显示所有的线程,如下图所示。

(2) 显示的所有线程中寻找Kernel32! UnhandledExceptionFilter信息,如下图所示。

 

(3) 根据以上信息可以知道系统崩溃所在的线程是16号线程,在WinDBG的线程窗口中,用鼠标选中第16号线程,如下图所示。

   

(4)Command窗口中输入:dd0358d890命令,显示第一个参数的内存信息,此时指向EXCEPTION_POINTERS结构,如下图所示。

(5) 显示EXCEPTION_POINTERS 结构内存信息详细,如下图所示。

 

(6) Command窗口中输入:.exr 0358d840命令获取有关异常的类型信息,如下图所示。

 

 

(7) Command窗口中输入:.cxr 0358d898命令获取上下文的信息,如下图所示。

 

 

(8) Command窗口中输入:kv命令获得实际的异常的调用堆栈,如下图所示。

 

kv命令显示异常调用堆栈信息

0:016> kv

  *** Stack trace for last set context - .thread/.cxr resets it

ChildEBP RetAddr  Args to Child             

WARNING: Stack unwind information not available. Following frames may be wrong.

0358dbb0 026ff8ac 0358dc2c 00000001 00000008 MSVCR80!fwrite+0x39

0358ec34 02700d82 03460000 000027d8 03478f1c 123::ReadData+0x7c [123.cpp @ 176] 

(9) 根据以上信息可知,崩溃的文件是123.cpp。崩溃的函数是fwrite

原创粉丝点击