WinDbg 入门指导(3)-WinDbg中常用的功能以及设置

翻译 2007年10月14日 23:06:00

WinDbg的功能

调试器扩展DLL

所谓的扩展指的是一些DLL,你可以用在调试器内调用并且执行一些自定义的命令。这些DLL必须实现一些特定的函数,并且要满足一些需求,这样才能被认为是一个扩展DLL。在下一篇文章内,我们将会了解到怎样写出一个扩展DLL。所谓的bang(!)命令就是从你的扩展DLL内执行的命令。注意这些DLL是被加载到调试器的进程空间内。

内存转储文件

你可以使用转储功能来取得一个进程的快照信息。一个mini-dump通常比较小,除非你使用了全内存的minidump(.dump /mf)。通常能够转储句柄信息也是很有用的,命令是 .dump/mfh。一个小型转储通常包含了所有的线程的堆栈以及一个已被加载的模块的列表。一个全转储包含了更多的信息,比如进程的堆。

崩溃转储分析

如果你的windows系统当机,那么它就会在一个文件中转储物理内存中的数据,以及所有的进程信息。可以通过Control Panel ->System->Advanced->’Startup and Recovery’来配置。你也可以首先把WinDbg配置成为一个即时调试器,然后就可以取得任意一个非正常终止的进程的转储(.dump)。注意,从转储文件中分析出代码中的bug往往是一个复杂费力的过程。

使用以下的步骤来分析一个转储文件:

1)      WinDbg内,通过 File->’Open Crash Dump’, 指向转储文件。

2)      WinDgb会给你显示应用程序崩溃之时所执行的指令。

3)      正确设置你的符号文件目录和源代码目录。如果你不能够匹配正确的符号文件,想要弄清楚程序的逻辑是非常困难的。如果你能够把符号文件匹配到正确版本的源代码,这是就应该很容易分析出Bug原因。注意,私有符号文件含有行号信息并且会盲目的显示你源代码中的对应行而不进行任何的检查;如果你的源码版本不对,那么你就不能够看到匹配汇编代码的正确源码。如果你仅仅有公有的符号文件,你会看到最后一个被调用的函数(栈上的)。

注意调试驱动或者托管代码是与此有很大不同的。参考《The Windows 2000 Device Driver Book》来获得调试设备驱动的技术。

WinDbg的常用设置

符号文件与文件夹

如果想更有效的调试,你需要符号文件。符号文件可以是老式的COFF格式或者就是PDB格式。PDB就是程序数据库文件并且包含了公有符号。这些调试器内,你可以使用一系列的地址来让调试器寻找已经加载的二进制文件的符号。

操作系统的符号文件一般存储在%SYSTEMDIR%Symbols目录。驱动程序的符号文件(.DBG.PDB)一般存储在和驱动文件(.sys 文件)相同的目录下。私有符号文件包含的信息包括:函数,局部以及全局变量,以及用来把汇编代码和源代码关联起来的行号信息;对于客户来说,符号文件一半是公有的-这些文件仅仅包括公有成员。

你可以通过File-Symbol File Path来设置符号文件目录,或者使用 .sympath命令。如果想要添加到网络上符号文件的引用,添加以下的内容到你的 .sympath

SRV*downstream_store*http://msdl.microsoft.com/download/symbols

使用的命令就是:

.sympath+ SRV*c:/tmp*http://msdl.microsoft.com/download/symbols

 

C:/tmp就是download_store,所需要的符号文件会被下载存储至此。注意这个符号服务器仅仅开放了公有的符号文件。

当调试器把一个二进制文件(DLLexe)的时候,他会检查比如文件名,时间戳以及校验值。如果你有符号信息,你就可以在调用栈上看到函数名和他们的参数。如果二进制文件和PDB文件都来自于你自己的应用程序,你就可以看到比如私有函数,局部变量以及类型这类额外的信息。

源代码路径

你可以通过File->Source File Path来设置源码路径,或者使用.srcpath命令。如果你设置了代码的路径,当你调试的时候,调试器会通过PDB文件的行号信息来显示相匹配的源代码。

断点,跟踪

·         通过bp命令或者工具栏上的断点图片来设置软断点。

·         通过代码比如DbgBreakPoint() 或者 KdBreakPoint()来设置硬断点。

·         在扩展DLL中使用跟踪函数DbgPrint, KdPrint, OutputDebugString 来把输出显示在WinDbg的输出窗口中。

上一篇-WinDbg入门教程(2)-各种调试场景介绍

windbg常用断点 (zz)

windbg常用断点 //z 2012-08-16 16:43:36 IS2120@csdn.T3181799596[T8,L144,R4,V335] 拦截窗口: bp...
  • is2120
  • is2120
  • 2012-08-16 16:39:46
  • 743

WinDBG 使用多个路径下的符号表

原文:http://www.mycode.net.cn/platform/1841.html 在开发调试问题的过程中,我们经常使用 WinDBG 来调试崩溃、卡死或蓝屏的 Dump 文件,调试时我们...
  • thanklife
  • thanklife
  • 2017-11-10 11:13:18
  • 97

WinDbg常用命令大全

  • 2012年10月21日 14:43
  • 186KB
  • 下载

windbg 查看参数应用方法

最近在调试ntNtCreateKey函数,每次触发断点后,查看究竟哪个键值被创建应用一下几个步骤 1. dd esp指令得到nt!NtCreateKey第三个参数 aaa,类型为OBJECT_ATT...
  • xbgprogrammer
  • xbgprogrammer
  • 2015-08-21 14:00:07
  • 924

WinDbg学习(一)入门

本文主要介绍WinDbg的入门知识,包括:下载安装、启动、配置和简单的用户模式调试示例。在我学习WinDbg的过程,主要参考了“WinDbg软件自带的用户手册”和http://www.dbgtech....
  • Sagittarius_Warrior
  • Sagittarius_Warrior
  • 2016-09-13 11:01:22
  • 1490

Windbg调试----Windbg入门

Windbg简单来说就是一个Windows下对用户态/内核态的程序进行调试,以及对Core Dump文件的分析。对于Crash,资源泄露,死锁等问题的分析,Windbg是一个强有力的利器。相关资料本人...
  • CJF_iceKing
  • CJF_iceKing
  • 2016-08-05 13:26:41
  • 8986

windbg入门.rar

  • 2011年10月12日 00:25
  • 10.03MB
  • 下载

为WinDbg设置符号文件路径

WinDbg可以通过加载Symbol文件(*.pdb),即时的调试程序。 WinDbg如何找到相应的符号文件呢? WinDbg首先在.exe或者.dll所在目录下寻找同名的.pdb文件。如...
  • cbbbc
  • cbbbc
  • 2016-11-08 18:35:59
  • 1650

gdb和windbg常用调试命令对照

由于工作的需要,本人常常需要在gdb和windbg调试器上来回切换, 经常会弄混淆这两者的命令,现做个对照表,方便随时查阅。起始本人页经常用到ollydbg,但由于od界面很友好,不太需要用到命令,所...
  • joeleechj
  • joeleechj
  • 2013-08-17 11:20:48
  • 2096

windbg调试入门

windbg调试入门 转载:http://www.cnblogs.com/kekec/archive/2012/12/02/2798020.html 使用前首先设置符号表,菜单File=>symb...
  • blacet
  • blacet
  • 2015-10-28 10:17:32
  • 896
收藏助手
不良信息举报
您举报文章:WinDbg 入门指导(3)-WinDbg中常用的功能以及设置
举报原因:
原因补充:

(最多只允许输入30个字)