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学习(一)入门

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

windbg 脚本简单入门

标 题: 【原创】windbg 脚本简单入门 作 者: evileagle 时 间: 2013-10-31,23:04:24 链 接: http://bbs.pediy.com/showth...
  • superliuxing
  • superliuxing
  • 2014年02月14日 17:45
  • 3809

windbg设置条件断点

一直以为windbg的bp断点只是简单的在某个地址上下断点,后来才发现bp断点功能很强大:除了可以设置条件断点还是windbg脚本的基础.     使用方法很简单:bp address ".if(c...
  • lixiangminghate
  • lixiangminghate
  • 2016年07月28日 22:35
  • 1404

安装与配置windbg的symbol(符号)

本篇是新手自己写的一点心得.建议新手看看.同时希望前辈多多指教. 写这篇的动机:在网上找了一上午的windbg配置符号教程.楞是没找到详细的,都讲的太 模糊而且互相抄袭.不适合新手看.终于靠自己的...
  • nui111
  • nui111
  • 2016年07月12日 22:11
  • 3060

windbg调试和断点学习总结2

WinDbg 设置断点 在windbg中,断点设置的地址形式有好多种,可以是以下几种: 1.虚拟地址:即给出直接地址,如 12345678 2.函数偏移量:如DriverEntry+5c...
  • bcbobo21cn
  • bcbobo21cn
  • 2016年12月13日 10:56
  • 3522

使用WinDbg作为默认调试器, 调试本机应用程序

今天在写一个文件合并小工具,  因为程序较小,  编译成Release版带调试符号, 直接运行的. 后来改了点东西, 运行时突然报错. 我以前已经运行过(WinDbg -I), 在本机已经将Win...
  • LostSpeed
  • LostSpeed
  • 2013年07月01日 17:05
  • 3843

WinDbg 设置断点

在windbg中,断点设置的地址形式有好多种,可以是以下几种: 1.虚拟地址:即给出直接地址,如 12345678 2.函数偏移量:如DriverEntry+5c.3.源代码+行数 :`[[Mod...
  • kelsel
  • kelsel
  • 2016年10月08日 17:28
  • 436

Windbg扩展指令开发教程

之前我曾提供了导出stl map和set内容的windbg扩展指令库,并给出了使用方法。授人以鱼不如授人以渔,下面的文章将以开发一个导出CMap容器内容的windbg扩展指令cmap为例,介绍如果开发...
  • yichigo
  • yichigo
  • 2016年11月04日 13:10
  • 518

windbg设置双机调试的方法

windbg已不提供单独下载,wdk驱动开发工具包里附带有这个调试器.官网提供下载: http://msdn.microsoft.com/en-us/windows/hardware/gg487...
  • u011391040
  • u011391040
  • 2016年07月01日 11:17
  • 428

windbg调试入门

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

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