我怎么使用 WinDbg 为分析转储的文件?

有帮助吗?

解决方案

这里有一些一般性步骤,这将让你用自己的方式:

第一,必须改变编译器的设置使得它创建了PDB的文件,甚至对于释放生成。以后的版本中的 视觉C++ 编译器做这个默认,但在许多版本的视觉C++你必须这样做你自己。创建程序的数据库文件,然后保持一个归档,这些文件随着各建立的应用程序。至关重要的是,每一个建立应用程序都有自己的一套Pdb.你不能只是重复使用相同的你让与建设10个研究堆所产生的建造15,例如。在生活的项目中,你将会结束了一吨的Pdb,所以要做好准备。

接下来,你必须要能够识别的准确版本的应用程序而产生的倾倒的文件。如果你创造你自己的小型转储(通过调用 MiniDumpWriteDump() 例如),可能是最简单的方法来做到这一点是简单地做出部分的文件的转储的完整版本数量应用程序。你会需要有一个合理的版本的编号方案为这一工作。在我的店里,我们增加生数量在所有分支机构通过一个每次自动编译创建一个建立。

现在,你有收到转文件的客户,你知道精确的版本的应用程序创建的垃圾场,你已经找到了PDB文件,为此建立。

现在你需要通过你源控制的历史,找到源码为这个精确的版本的软件。最好的方式来做到这一点是应用"标签",以你的树枝每次你犯了一个建立。设置价值的标签,以精确的版本号以及它变得容易找到的历史。

你几乎可以准备开火了WinDbg/C++:

  1. 获得完整的源代码对该版本的应用程序。把它放在一个单独的地方,你的硬盘驱动器上说 c:\app_build_1.0.100 为应用版本1.0建立#100个。
  2. 得到的二进制文件,确切版本的应用程序并把他们的某个地方你的硬盘驱动器。这可能是最简单的,只需要安装这一版本的应用程序得到的二进制文件。
  3. 把PDB的文件在同一位置,作为二进制文件中的步骤2。

现在你有两个选择对于观看的倾倒的文件。你可以使用 Visual Studio 或WinDbg.使用Visual Studio是容易的,但WinDbg是更强大。大部分时间的功能在Visual Studio就足够了。

使用Visual Studio,你所要做的是打开文件转储喜欢它是一个项目。一旦打开,"执行"的倾倒文件(文件F5 通过默认)和如果所有的路径,设置正确,它会带你到代码的崩溃,给你打电话的堆,等等。

使用WinDbg,你要跳过一两圈:

  1. 开始WinDbg
  2. 打开转储的文件。(Ctrl + D 通过默认)
  3. 告诉WinDbg去得到正确的MicroSoft符号文件。类型 .symfix.这可能需要一些时刻,因为它将拉吨的东西从互联网上。
  4. 告诉WinDbg其中的符号(PDB文件)。类型 .sympath+ c:\pdblocation, 替换无论你把PDB文件pathname.确保你得到加标志在那里没有空间 .sympath+ 签名或者别你会搞砸了步骤3。
  5. 告诉WinDbg其源代码。类型 .srcpath c:\app_build_1.0.100 代路径在那里你得到了代码从源头控制这个版本的软件。
  6. 告诉WinDbg分析转储的文件。类型 !analyze -v

几分钟后,如果一切都是正确配置,WinDbg会带你去你的位置崩溃。在这一点上,你有一百万选择挖掘的深入应用程序的存储空间、国家的关键部分,窗户,等等。但是这是 方式 超出范围的这一员额。

祝你好运!

其他提示

(见"倾销"部分下面)

基本教程和示威的使用WinDbg

不同的方式"开始"/附加WinDBG

工作区

理解如何工作区的工作...

Cmdtree

一个"cmdtree"可以定义的"菜单"的调试器的命令,为便于访问经常使用的命令而不必要记得简洁命令的名称。

你不必把所有的命令定义为同cmdtree文本的文件。...你可以保持他们单独的并载多个,如果你的愿望(他们然后让他们自己的窗口)。

启动脚本

你可以使用的-c的选项的命令行自动运行的一个WinDBG剧本的时候你开始WinDBG.

给个机会,把在仔(调试器标记语言)的模式,负载特定的扩展,设置。净异常断点,核心标志(例如当核试你可能需要改变DbgPrint掩所以你看到跟踪信息。...ed nt!Kd_DEFAULT_Mask0xffffffff),载cmdtrees,等等。

一个例子脚本:

$$ Include a directory to search for extensions
$$ (point to a source controlled or UNC common directory so that all developers get access)
.extpath+"c:\svn\DevTools\WinDBG\Extensions"
$$ When debugging a driver written with the Windows Driver Framework/KMDF
$$ load this extension that comes from the WinDDK.
!load C:\WinDDK\7600.16385.1\bin\x86\wdfkd.dll
!wdftmffile C:\WinDDK\7600.16385.1\tools\tracing\i386\wdf01009.tmf
$$ load some extensions
.load msec.dll
.load byakugan.dll
.load odbgext.dll
.load sosex
.load psscor4
$$ Make commands that support DML (Debugger Markup Language) use it
.prefer_dml 1
.dml_start
$$ Show NTSTATUS codes in hex by default
.enable_long_status 1
$$ Set default extension
.setdll psscor4
$$ Show all loaded extensions
.chain /D
$$ Load some command trees
.cmdtree c:\svn\DevTools\WinDBG\cmdtree\cmdtree1.txt
.cmdtree c:\svn\DevTools\WinDBG\cmdtree\cmdtree2.txt
$$ Show some help for the extensions
!wdfkd.help
!psscor4.help
.help /D

命令作弊表

扩展

"扩展"允许你来扩大范围的命令/功能支持内部WinDBG.

写你自己的延伸

使用WinDBG调试代码管理

Scripting(C#PS,蟒蛇,WinDBG)

调试程序/工具的使用dbgeng.dll API/WinDBG工具

不同的方式产生崩溃转储文件进行事后分析

转存分析工具

转储相关的工具

核试虚拟机

  • VMKD -虚拟机KD扩展
  • VirtualKD -(核debugger支持操作系统的托管VMWare/在开始)

视频

博客

一些博客(混合母和管理的码调试)。

先进的文章和教程的资源

替代调试器

其他链接

  • 协作RCE工具图书馆
    -巨大的收集的调试和系统层面工具
  • cr4zyserb
    -很大的插件和其他调试工具
  • 如何写一窗户调试器引用(德文草)
    大收藏的链接给你详细信息,你会需要的,如果你想写自己的调试器例如PDB文件格式.DMP文件的格式,PE文件的结构,如何记录堆的痕迹,等等,等等。
  • Tuts4You
    -unpackers、IDA,OllyDBG、免疫调试器插件,等等。

这是一个非常广泛的问题。

  1. 第一步是加载文件转储到一个WinDbg的实例。
  2. 接下来,你需要确保有一个符号的设置。
  3. 最后,可以执行命令 !analyze -v 得到一个基本进行的分析。你需要有象征信息可用你的代码来做倾倒的文件值得的。

该网站 存储场,软件跟踪、调试、恶意软件,Victimware和情报分析门户网站 已经非常丰富对我来说。我也真的很喜欢这本书, 高级Windows调试 由马里奥Hewardt和丹尼尔Pravat.

苔丝Ferrandez具有很大基本教程和实验室的设置,可以立即开始使用WinDbg。我高度推荐它们。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top