当前位置:文档之家› WinDbg调试入门ppt

WinDbg调试入门ppt

WinDbg调试入门

郝永健2009-05-03 emailme@https://www.doczj.com/doc/d914734395.html,

为什么要使用Windbg WinDBG利用自带的符号检查下载工具,可以获包含VC自带的符号文件外,系统大部分DLL或EXE的符号文件,调试粒度更小。而VC除了自带的符号文件,和自身产生的符号文件外,只能使用DLL导出的函数作为符号。

WinDBG可以调试驱动;VC不能,只能作为普通的应用程序调试器

WinDBG和VC都支持远程调试

Windbg简介

?微软内部工具,持续升级?与windows系统集成

?强大的系统跟踪能力

?可以解决bug

?多种模式

用户态、内核态

现场调试、转储分析

WinDbg原理

?调试寄存器

?Windows调试子系统

?核心组件dbghelp.dll+dbgeng.dll

暴露的调试接口

IDebugControl、IDebugClient、IDebugDataSpaces、IDebugSystemObjects、IDebugSymbols、IDebugRegisters、IDebugAdvanced

Windbg的安装

?从

https://www.doczj.com/doc/d914734395.html,/whdc/DevTools/ Debugging/default.mspx下载,根据芯片的不同,下载不同的版本

?工具族

cdb、AdPlus、Ntsd、KD、symcheck、UMDH、gflags

把WinDBG作即时调试器用

?想要崩溃的时候就由WinDBG调试

?执行windbg.exe –I

?[HKEY_LOCAL_MACHINE\SOFTWARE\Micros oft\Windows NT\CurrentVersion\AeDebug] Auto=0

Debugger="C:\Program Files\Debugging Tools for Windows\windbg.exe" -p %ld -e %ld -g UserDebuggerHotKey=dword:00000000

WinDbg界面

名称热键用途Command Alt+1

Watch Alt+2

Locals Alt+3

Registers Alt+4

Memory Alt+5

Call Stack Alt+6

Disassembly Alt+7

Scratch Pad Alt+8白板,调试笔记Processes and threads Alt+9

Command Browser Alt+N

符号与符号服务器

?文件菜单设置符号路径

SRV*c:\windows\symbol

s*\\192.168.15.218\sym

store*http://msdl.micros

https://www.doczj.com/doc/d914734395.html,/download/symb

ols;d:\XXXX;

两种语法格式

?.sympath命令

?搭建自己的符号服务器

让VC2005获得同样的符号加载

功能

?把WinDBG安装目录下的symsrv.dll拷贝到VC的IDE目录,类似于

D:\DevTools\Microsoft Visual Studio

8\Common7\IDE\,VC2005默认是有这个文件的,但版本已老

?启动VC,打开Tools -> Options中设置(每个版本的VC设置有所不同)

Windbg的调试方式?内核态

双机

本地内核

?用户态

现场调试

转储分析

用户态调试-现场调试?使用Windbg启动Ctrl+E

观察启动初始信息

?使用Windbg关联进程F6

观察关联初始信息

?随目标进程启动而启动

GFlags

?DebugBreak() 与_int3

用户态调试-现场调试-调试服务?大部分服务是不和桌面交互的,所以在WinXP下面,你还需要把服务设为和桌面交互的,否则WinDBG运行在一个你看不见的桌面,而你又过不去那个桌面。

?sc config kis type= own type= interact

?然后启动服务,你就看见WinDBG出来了

?请快速的让进程走过RegisterServiceCtrlHandlerEx这个函数。

?否则超时后,进程和WinDBG都会被结束,不再有调试机会。

用户态调试-转储分析?生成转储文件的方法

windbg/drwtsn32/ntsd/.crash

?转储文件的类型

?打开转储文件

观察转储文件基本信息

用户态调试-转储分析

?崩溃分析

?!analyze –v

?.ecxr

Windbg命令-标准命令?控制目标执行:g、t、p、wt

?查看/修改寄存器:r

?读写IO:ib/iw/id、ob/ow/od

?查看/编辑/搜索内存:d…、e…、s、dt、dv

?查看栈:k…

?断点:bp、bl、bd、bc、be、ba

?查看/切换线程:~

?查看/切换进程:|

?汇编与反汇编:a、u

?显示段选择子:dg

?执行命令脚本:$

?设置事件处理方式:sxe/sxd、sq、so、ss

?显示调试器版本和目标版本:version/vertarget

?查看符号:x

?控制和显示源程序:ls

?加载调试符号:ld,搜索相邻符号:ln,

?显示模块列表:lm、lmf、lmvm

?结束调试会话:q、qq、qd

Windbg命令-元命令?显示和设置调试会话和调试器选项:

.symopt、.sympath、.symfix

?控制调试会话和目标:.restart、.create、.attach ?管理扩展命令模块:.load、.unload

?管理符号:.reload

?管理调试器日志文件:.logfile…

?异常分析:.exr、.cxr、.ecxr

?控制调试器:.sleep

?远程调试:.remote

?调用函数命令:.call

?脚本语言命令:.if、.while、.print、….

Windbg命令-扩展命令

?![扩展模块名].<扩展命令名> [参数,,,,]?默认加载的模块,常用扩展命令,

!handle、!locks、!cs…….

Windbg-解决崩溃

?Bu kernel32!UnhandledExceptionFilter ?EXCEPTION_POINTERS结构

Windbg-解决CPU居高不下

?!runaway

?ProcessExplorer

?TaskInfo

?ProcessMoniter

Windbg-解决死锁

?!locks

?ApplicationVerify

windbg

几个常用的WinDBG命令 转载,但没找到原始出处,sorry。 1.查询符号 kd> x nt!KeServiceDescriptorTable* 8046e100 nt!KeServiceDescriptorTableShadow = 8046e0c0 nt!KeServiceDescriptorTable = kd> ln 8046e100 (8046e100) nt!KeServiceDescriptorTableShadow | (8046e140) nt!Mm SectionExtendResource Exact matches:(精确匹配) nt!KeServiceDescriptorTableShadow = 2.下载系统文件的符号 symchk c:\winnt\system32\ntoskrnl.exe /s srv*c:\symbols*https://www.doczj.com/doc/d914734395.html,/download/symbols SYMCHK: FAILED files = 0(用于验证符号文件或者从符号服务器下载符号文件的工具)SYMCHK: PASSED + IGNORED files = 1 (通过+被忽略的文件) 3.查看event对象的信号状态 !object \BaseNamedObjects(!对象\ BaseNamedObjects) dt -b nt!_KEVENT xxxxxxxx 4.查看LastError值 !gle 5.指定进制形式,0x/0n/0t/0y分别表示16/10/8/2进制 ? 0x12345678+0n10 Evaluate expression: 305419906 = 12345682 (求值|求表达式值) 6.过滤命令窗口输出信息 .prompt_allow -reg +dis -ea -src -sym (命令控制在单步和跟踪时显示哪些信息,以及目标的执行何时停止) 7. .formats命令

windbg 调试指南,英文版

Debugging Windows Applications with IDA WinDbg Plugin Copyright 2011 Hex-Rays SA Quick overview: The Windbg debugger plugin is an IDA Pro debugger plugin that uses Microsoft's debugging engine (dbgeng) that is used by Windbg, Cdb or Kd. To get started, you need to install the latest Debugging Tools from Microsoft website: https://www.doczj.com/doc/d914734395.html,/whdc/devtools/debugging/installx86.mspx or from the Windows SDK / DDK package. Please make sure you should install the x86 version of the debugging tools which is used by both IDA Pro and IDA Pro 64. The x64 version will NOT work. After installing the debugging tools, make sure you select ? Debugger / Switch Debugger ? and select the WinDbg debugger. Also make sure you specify the correct settings in the “Debugger specific options” dialog:

WinDBG+VMware双机内核调试环境搭建

WinDBG+VMware双机内核调试环境搭建 因为接下来要写个文件过滤驱动,要有个内核调试环境,昨天天搭了一下,比较简单,网上已有详细步骤。 vmware中装个winxp,暂且称为SlaveOS吧。相应的我们主系统成为MasterOS。 我的步骤如下: 1.先在MasterOS上装WinDbg。在桌面建一个快捷方式,修改程序启动参数。具体操作为右键WinDBG快捷方式-》属性。现在的目标内容为(假设):"E:\Program Files\Debugging Tools for Windows (x86)\windbg.exe",在它后边加上-b -k com:pipe,port=\\.\pipe\com_1,resets=0,注意,红字部分加在引号外面。确定。 2.MasterOS设置结束,接下设置vmware虚拟机。设置虚拟机需要在SlaveOS关闭的情况下进行。 打开虚拟设置,增加一个“Serial Port",如图1: 图1 3.下一步选择”Output to named piped".如图2:

图2 4.虚拟机配置完毕,接下来启动SlaveOS进行配置。 打开虚拟机c:\boot.ini。在文件末尾加上: multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional Debug" /fastdetect /debugport=com_1 /baudrate=115200 保存后重启。启动菜单会新增一个debug的菜单。如图3:

图3 5.在上述界面按下上下箭头键。回到MasterOS,通过快捷方式打开WinDBG,此时WinDBG会出现如下提示: Microsoft (R) Windows Debugger V ersion 6.11.0001.404 X86 Copyright (c) Microsoft Corporation. All rights reserved. Opened \\.\pipe\com_1 Waiting to reconnect... 回到虚拟机,按下回车,windgb会显示连接信息。如图4,此时在kd>后面输入命令g,SlaveOS 就会进入Debug模式了。

WinDbg安装与配置教程

方案一: WinDbg配置和使用基础 WinDbg是微软发布的一款相当优秀的源码级(source-level)调试工具,可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件。 1. WinDbg介绍: Debugging Tools and Sy mbols: Getting Started https://www.doczj.com/doc/d914734395.html,/whdc/devtools/debugging/debugstart.mspx A word for WinDbg https://www.doczj.com/doc/d914734395.html,/communityserver/blogs/mike_taultys_blog/archive/2004/08/03/4656.aspx 2. WinDbg下载: Install Debugging Tools for Windows 32-bit Version https://www.doczj.com/doc/d914734395.html,/whdc/devtools/debugging/installx86.mspx Install Debugging Tools for Windows 64-bit Versions https://www.doczj.com/doc/d914734395.html,/whdc/devtools/debugging/install64bit.mspx 3. 配置WinDbg: 运行WinDbg->菜单->File->Symbol File Path->按照下面的方法设置_NT_SYMBOL_PATH变量: 在弹出的框中输入“C:\MyCodesSymbols; SRV*C:\My LocalSy mbols*https://www.doczj.com/doc/d914734395.html,/download/symbols”(按照这样设置,WinDbg将先从本地文件夹C:\MyCodesSymbols中查找Symbol,如果找不到,则自动从MS的Symbol Serv er上下载 Sy m bols)。另一种做法是从这个Symbol下载地址中 https://www.doczj.com/doc/d914734395.html,/whdc/devtools/debugging/symbolpkg.mspx,下载相应操作系统所需要的完整的Sy m bol安装包,并进行安装,例如我将其安装在D:\WINDOWS\Sy m bols,在该框中输入 “D:\WINDOWS\Sy m bols”。(这里要注意下载的Symbols的版本一定要正确,在我的Win2003+Sp1上,我曾经以为安装Win2003+Sp2的Symbols可能会牛×点,但结果证明我错了,用WinDbg打开可执行文件时,提示“PDB sy m bol for m scorwks.dll not loaded;Defaulted to export symbols for ntdll.dll”的错误,我有重新装上 Win2003+Sp1的Sy mbols, 现在一切运行正常^_^) 4. 使用WinDbg: WinDbg提供了图形界面和命令行两种运行方式。 这里介绍使用图形界面的WinDbg来调试应用程序: File->OpenExecutable->可以选择一个 可执行文件进行调试; File->Attache to a Process->可以选择 一个运行中的进程,并对其进行调试;

Windows调试工具入门2(WinDbg基本调试器设置)

Windows调试工具入门2—基本调试器设置 设置 Windows调试工具入门-2 本篇介绍Windows调试工具的基本设置和基本操作方法。这里我们会用一个测试程序一步一步说明如何使用WinDbg开始调试工作。首先用VC建立一个名为TestDebug1的控制台项目,并生成它。 、源码和可执行映像路径设置 符号、 一、符号 使用WinDbg开始调试工作之前,最重要的就是配置好各种环境了。这使得调试器可以正确识别调试目标中的各种变量、函数等等,使得我们能够进行符号化调试或者源码调试,而不是只能在一堆汇编代码中转圈。 首先来看一下未设置环境之前的样子。使用刚才说的TestDebug1项目,为了对比更清晰,用Release进行编译,链接选项中选中生成map文件和调试信息,如下: 在C/C++选项卡中设置如下:

程序代码如下: #include "stdafx.h" #include int main(int argc, char* argv[]) { printf( "TestDebug1.cpp"); return 0; } 编译之后,将Release目录下的TestDebug1.pdb剪切到其他目录下(如果没有这样做,由于编译出来的程序中包含了符号文件路径,调试器可以直接使用exe中的信息找到pdb文件,而不需要设置路径)。在map文件中可以看到像下面这样的内容: 0001:00000000 _main 00401000 f TestDebug1.obj 说明main函数位于401000地址处。 通过WinDbg的File->Open Executeable菜单打开TestDebug1.exe,可以在调试器命令窗口 中看到下面的内容:

Windows调试工具入门3(WinDbg基本调试操作)

Windows调试工具入门3—基本调试操作 Windows调试工具入门-3 基本调试操作 基本调试操作 一、调试器命令窗口 1、简介 使用Windows调试工具进行调试,大部分和调试器之间的交互都是通过调试器命令窗口来进行的。命令的输入、输出都是在调试器命令窗口中显示出来。对WinDbg来说,调试器命令窗口是名为”Command”的窗口;对于KD、CDB和NTSD来说,整个命令行窗口就是调试器命令窗口。这里主要介绍WinDbg中的调试器命令窗口。 一般来说WinDbg运行之后都会打开一个标题为Command的子窗口,在没有调试目标的时候,这个窗口是不能接受输入输出的,这时WinDbg处于静止模式,只有在打开调试目标之后,才能够使用它和调试器交互。 窗口分为三个部分: 位于上部的面积最大的是命令输出窗口。所有的命令输出、目标程序的调试信息输出等等都会在里面显示出来。上一篇中介绍的调试器日 志中记录的就是显示在这里的内容。

下半部分左边是提示符窗口。这里通过提示符能够快速知道调试器目前的状态。 上图中0:000>,冒号前的数字表示当前的进程号,同时调试多个进程 时,每个进程都会被指派一个进程号;冒号后的000表示线程号。 进行内核调试时,如果是单处理器系统,提示符是kd>的形式;如果 是多处理器系统,则是0: kd>的形式,前面的0表示处理器号。 提示符还可能是*BUSY*这样的字符串,以表示调试器正忙。也可以 通过命令来自定义提示符。 下半部分右边是命令输入窗口。需要执行的命令就在这里输入。 调试器命令窗口中输入命令时可以使用一些快捷操作: 上下方向键可以查找先前的命令。 ESC键用于清除当前行的命令。 TAB键用于自动补完命令。例如一些符号可以只输入一部分,然后通过按下TAB一次或多次来找到需要的符号。 鼠标右键点击命令窗口,可以将剪贴板中的内容粘贴到命令输入框中。 直接按下ENTER键重复上一条命令。这个功能在WinDbg中可以通过命令来打开或关闭。 如果某条命令产生了很长的输出,可以按下CTRL+BREAK来中断它。 二、控制调试目标的执行 这里的控制目标执行,主要是指如何让运行中的目标中断到调试器中,以及控制中断的目标如何继续执行。 1.中断调试目标 当调试目标处于运行状态时,WinDbg是不能输入命令或者对它进行操作的。可以通过 按下CTRL+BREAK或者点击工具栏的按钮来中断它。下面我们继续用上一篇中的TestDebug1项目来说明。修改TestDebug1.cpp如下: #include "stdafx.h" #include int main(int argc, char* argv[]) { int i = 0; while( 1) { printf( "TestDebug1.cpp:%d\r\n", i);

WinDbg+VMware 调试驱动

WinDbg+VMware 调试驱动 默认分类 2009-12-25 09:26:24 阅读466 评论0字号:大中小 Windbg+Vmware驱动调试入门,写给wakaka小童鞋,很强大的小童鞋,同时也做为自己的存档~~ Windbg的设置 Windbg本身可以直接从微软的网站上下载 下载地址:https://www.doczj.com/doc/d914734395.html,/whdc/devtools/debugging/default.mspx Windbg的设置其实主要是关于调试符号的设置,没有符号你会很不爽,会忽视掉许多细节,因此调试符号之于Windbg是非常重要的. 1.系统调试符号的设置 首先找个空间足够的位置,XP sp2的调试符号完整一点大概需要1G的空间~~ 比如我是在D盘,建立一个MyLocalSymbols文件夹,用来存放系统的符号文件. 然后你可以从微软的网站上下载相应的调试符号包(大要180M~200M大小),要根据你虚拟机中的相应系统版本来下载,安装到MyLocalSymbols文件夹下. 当然,不安装符号包的话也可以设置成调试时自动从网上下载(即使你安装了符号包,有部分内容还是要到网上下载),具体怎么设置稍后讲. 不过我比较喜欢一次搞完,免得每次用的时候都要等它到网上下载比较慢~~ 2.自己的调试符号的设置 再建一个文件夹,用于存放我们自己编译出来的驱动的符号文件.单独存放,不要跟系统的混到一起. 我这里就仍在D盘建立一个MySysSymbols文件夹,用于存放自己的符号文件. 然后给这个文件夹创建一个快捷方式,把它放到C:\Documents and Settings\你的用户名\SendTo文件夹下. 这样,以后编译完驱动以后,直接在符号文件上右击->发送到"MySysSymbols"就可以了,很方便~~ 3.环境变量的设置 如果你想Windbg启动时自动识别符号路径的设置的话,我们就来建立一个环境变量 在"我的电脑"上右击,"属性"->"高级"->"环境变量",然后我们给当前用记新建一个名为_NT_SYMBOL_PATH的环境变量 值为:

如何使用WinDbg

如何使用WinDbg? 1)打开了虚拟机和WinDbg,中断虚拟机的运行:点击如下红框内图标 或按Ctrl + Break键或使用菜单Debug中的Break命令。 2)继续虚拟机的运行:点击如下红框内图标 或按F5键或使用菜单Debug中的Go命令。 3)欲取得WinDbg的帮助信息,单击Help菜单命令。 4)欲输入调试命令:使用View---Command命令打开Command窗口: 此时,可以输入命令,进行调试。 5)观察当前调试的程序所在的范围(可能是函数)中各种变量的值或变量的表达式的值,使用View---Watch命令打开Watch窗口如下:

是查看窗口,可以在Name中输入变量名或变量的表达式,Value中显示此表达式的值。要查看当前范围内的局部变量的值,可以使用View---Locals命令: 6)查看寄存器的内容:使用View--Register命令:

7)查看内存内容:使用View--Memory命令: 左上角的Virtual后的文本框里输入虚拟地址,Display format表示显示的格式,可以使用Byte(字节形式),ASCII(字符格式)等不同格式。Previous和Next分别表示显示上一页和下一页的虚拟地址的内容。 8)查看堆栈信息:使用View--Call Stack命令:

注:信息区域中最上面的表示堆栈的顶部。 9)显示执行程序的汇编代码格式:使用View--Disassembly命令:: 10)记录便签信息:使用View--Scratch Pad命 令:

11)查看当前正在调试的进程和线程:使用使用View--Processes and Threads命令:如内核模式下调试可以得到如下信息: 12)欲查看一些命令的更详细的信息,可使用命令View---Verbose Output命令使得V erbose 处于On的状态:处于On的状态究竟能使得哪些命令更加详细,目前还不清楚。 13)要改变WinDbg显示的字体等选项,可以使用View---Font...命令或View---Options...命令。

Windows调试工具入门-6(WinDbg内核调试常用命令2)

WinDbg内核调试常用命令(2) 接上一章继续介绍内核调试下的常用命令,这一章主要涉及内存相关、对象相关、驱动设备相关以及蓝屏Dump 相关命令。介绍每个命令的主要作用,以及常用方式,不会涉及详细的命令参数,目的是能快速上手熟悉内核调试下的常用操作,而不是替代帮助文件。 内存相关 内存操作应该是调试最常用的,比如查看内存、修改内存等。本节介绍内核模式下常用的内存操作命令,大部分是内核模式下特有的命令,诸如db/eb/dt/s等基本内存命令则不会介绍。 !address !address命令显示内存信息,如内存范围、内存权限等。这条命令在用户模式下也能用,而且显示的信息比较丰富。 !address命令不带参数时,显示所有内存信息。 kd>!address 80800000-0026b000 Usage KernelSpaceUsageImage ImageName ntoskrnl.exe 80a6b000-0001f000 Usage KernelSpaceUsageImage ImageName halacpi.dll ...... f51d9000-00005000 Usage KernelSpaceUsageKernelStack KernelStack81827020:340.7ac ...... f894f000-00002000 Usage KernelSpaceUsageImage ImageName swenum.sys f8951000-00256000 Usage KernelSpaceUsageNonPagedSystem f8ba8000-07038000 Usage KernelSpaceUsageNonPagedPoolExpansion Usage表示内存用途,如内核映像、非分页内存、内核栈、会话空间等。通过Usage就能大概了解某段内存的

WinDBG+VMware=调试内核

WinDBG+VMware=调试内核 2008-07-14 20:40 呵呵,搞点突兀的标题而已。其实说的还是如何使用WinDBG和VMware来搭建调试内核的环境而已,这些网上已经有数不清的教程了,不过我喜欢自己亲手写一下。第一,把这个过程写一遍能加深印象,就算以后忘记了也可以有笔记查找,快速想起来。第二、网上的教程很多都是互相抄来抄去,连错误也抄过去了。很典型一个错误就是Baud Rate,前面还写115200,后面就写成了11520了,狂汗! 按照我这篇笔记写的步骤去做,绝对能够成功,并且还能大略地了解到为什么要这样做的原因。第1部分是步骤,如果不想看原因的,直接按部照搬就可以成功。如果还想深入点了解为什么要做这些步骤,这些步骤的含义是什么?那就请继续看第二部分。 第一部分(步骤): 先统一名称,真实的操作系统叫HostOS,在VMware里虚拟的操作系统叫GuestOS。 1.在VMware里安装好GuestOS;下载WinDBG并安装好。 2.添加一个串口 在关闭GuestOS的情况下才能添加硬件。添加串口的过程如下:

选择“串行端口”,

选择“输出命名管道”, 其他如下设置:

3.在GuestOS的boot.ini文件里填入如下内容: multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional Debug" /fastdetect /debugport=com1 /baudrate=115200 如图: 4.创建一个WinDBG的快捷方式,在“目标”一栏后面加上: -b -k com:pipe,port=\\.\pipe\com_1,resets=0 如图:

windbg+虚拟机内核调试过程

使用Virtual PC进行Windows内核调试的详细过程 使用WinDbg进行Windows内核调试通常需要两台计算机,一台是Debuggee,一台作为Debugger,又成为Host。使用Virtual PC可以在同一台电脑上进行内核调试,对于某些调试任务来说还是非常有用的。 下面以Virtual PC 2004为例,介绍一下利用Virtual PC进行Windows内核调试的详细过程。 1,下载并安装Virtual PC 2004,从略。 2,启动Virutal PC Console(控制台),创建一台新的虚拟PC,安装向导的提示配置硬盘、内存等参数。 3,在刚才创建的虚拟PC上安装操作系统,这个操作系统应该是你要调试的Windows版本。比如你想调试你的驱动程序在Windows Server 2003上出现的问题,那么就安装Windows Server 2003。我们以Windows 2000为例。 4,配置虚拟PC的串行口,在Virtual PC的控制台中选择Windows 2000,然后点击Settings按钮弹出设置对话框,然后在左侧的列表中(如下图)选择COM1。

右侧选择Named Pipe选项,即使用命名管道来模拟串行口,然后输入管道的完整名称:\\.\pipe\com_1,com_1可以为其它名称,但是前面的部分应该保持不变。 5,启动虚拟PC中的Windows 2000,然后进入命令行窗口,执行如下命令以便在启动菜单中增加调试选项: c: cd\ attrib -r -h edit boot.ini 然后将其最末一行复制,并加入调试选项,成为为如下状态:

WINDBG内存调试

WINDBG调试.NET内存 进入WinDBG,检查托管代码 ●打开WinDbg命令窗口(ALT+1) ●输入.load sos.dll 查看占用了空间的托管对象 MT Count TotalSize ClassName MT-Method Table Free代表被GC回收 常用参数 -type某一特定类型;如:!dumpheap –type System.String,列出堆上所有的String -mt列出某一特定MethodTable的所有Object

所有具有终结/析构器的都被注册到终结器队列中,当对象被垃圾收集时,终结器会运行析构函数,否则在dispose函数中终结过程会挂起 如果Read for finalization>0则说明中终结器线程被堵塞,会消耗很多内存

13000 ( 76) : 00.00% 00.01% : RegionUsageTeb 9b22000 ( 158856) : 07.58% 25.24% : RegionUsageHeap 0 ( 0) : 00.00% 00.00% : RegionUsagePageHeap 1000 ( 4) : 00.00% 00.00% : RegionUsagePeb 1000 ( 4) : 00.00% 00.00% : RegionUsageProcessParametrs 1000 ( 4) : 00.00% 00.00% : RegionUsageEnvironmentBlock Tot: 7fff0000 (2097088 KB) 总共有2GB的虚拟内容空间(通常典型的是2GB的用户模式内容空间,在64位机上获得到4GB 的内容控件) Busy: 266a2000 (629384 KB) 已经使用了629M内存空间 -------------------- Type SUMMARY -------------------------- TotSize ( KB) Pct(Tots) Usage 5994e000 ( 1467704) : 69.99% : eacf000 ( 240444) : 11.47% : MEM_IMAGE 表示一个可执行的映射文件的一部分映射到内存,就是dll或一个exe的内存映射5a59000 ( 92516) : 04.41% : MEM_MAPPED 1217a000 ( 296424) : 14.14% : MEM_PRIVATE 私有内存,不合其他进程共享内存,不是映射到文件的内存;MEM_PRIVATE是保留+已提交(即以分配的)(Reserved+Committed) -------------------- State SUMMARY -------------------------- TotSize ( KB) Pct(Tots) Usage 1b624000 ( 448656) : 21.39% : MEM_COMMIT 5994e000 ( 1467704) : 69.99% : MEM_FREE b07e000 ( 180728) : 08.62% : MEM_RESERVE 已保留(但没有实际分配未提交)的内存 Largest free region: Base 2203c000 - Size 1e234000 (493776 KB) VAD = Virtual Alloc Image =dlls和exes

windbg双机调试的配置方法(1394版)

windbg双机调试的配置方法(1394版) 学习各种外挂制作技术,马上去百度搜索"魔鬼作坊"点击第一个站进入、快速成为做挂达人。 昨天在Berry的指导下开始了双机调试之旅(两台笔记本) 准备的材料:两台都有1394的机器,我这里用的是笔记本,一根1394线(1394线有3种,4对4,4对6,6对6,一般笔记本都是4口的,所以我买了一根4对4的线,市场价大概30元吧,也许还有更便宜的) 下面,被调试机称target,调试机称Host。 target机配置: 2000-2003的配置: 在boot.ini里面加一行: multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP1394"/noexecute =optin/fastdetect/debug/debugport=1394/channel=20 红颜色的是关键,前面的根据各人的电脑自己配置,网上配置虚拟机调试的教程很多,不多说了,注意我这里最后的channel是20,然后禁用1394(2000必须禁用,xp以上不需要,系统会在进debug后自己禁用),重启,选这个选项进系统 host机配置: 安装windbg(最好是用微软的安装包安装,不是copy),然后把1394线拔了(这里我搞了半个小时,最后快放弃了才成功的关键点,也许是我的host机器太老了,1394设备太烂,插了线就不认),然后打开windbg,按Ctrl+K,选择1394,填入20(这里的20是上面的channel),然后确定,这时候windbg会自动安装一个虚拟的1394的驱动,然后会wait to connect,这时候插上线,就可以调试了。 以后可以在windbg的快捷方式里面填上启动选项 -k1394:channel=20,symlink=instance 这样可以快速启动1394调试

windbg调试dmp

如何根据程序崩溃时的DMP文件使用WinDbg查找调用堆栈 HOW TO:查找问题的异常堆栈时出现的UnhandledExceptionFilter 调用堆栈跟踪中 https://www.doczj.com/doc/d914734395.html,/kb/313109/zh-cn 察看本文应用于的产品 本页 概要 使用Windbg.exe 打开转储文件 使用Windbg.exe 确定异常堆栈 参考 展开全部| 关闭全部 概要 没有异常处理程序定义处理引发的异常时,将调用该UnhandledExceptionFilter 函数。通常,该函数会将异常传递给在Ntdll.dll 为文件其中捕获,并尝试处理设置。 在进程的内存快照所在某些情况下,可以看到锁定点保存到线程的线程的调用UnhandledExceptionFilter 函数。在这的种情况下您可以按照本文以确定导致此异常的DLL。 回到顶端 使用Windbg.exe 打开转储文件 下载并安装调试程序。要下载调试程序,请访问下面的Microsoft 网站: Microsoft 调试工具 https://www.doczj.com/doc/d914734395.html,/whdc/devtools/ddk/default.mspx (https://www.doczj.com/doc/d914734395.html,/whdc/devtools/ddk/default.mspx) 打开安装调试程序,文件夹,然后双击Windbg.exe 启动调试器。 在文件菜单上单击打开的崩溃转储(或按Ctrl+D),然后选择要查看该转储文件。 回到顶端 使用Windbg.exe 确定异常堆栈 在Windbg.exe,打开进程的.dmp 文件。 请确保您符号路径指向正确的位置。有关如何执行此操作,请访问下面的Microsoft Web 站点: 如何获得符号 https://www.doczj.com/doc/d914734395.html,/whdc/devtools/ddk/default.mspx (https://www.doczj.com/doc/d914734395.html,/whdc/devtools/ddk/default.mspx) 在命令提示符下键入~ * kb 以列出所有进程中的线程。 标识对函数调用的线程Kernel32! UnhandledExceptionFilter 。它类似于以下:

使用WinDbg调试程序

什么是WinDBG? WinDbg是微软开发的免费源码级调试工具。Windbg可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件。由于大部分程序员不需要做Kernel模式调试,我在这篇文章中不会介绍Kernel模式调试。Kernel模式调试对学习Windows核心极有帮助。如果你对此感兴趣,可以阅读Inside Windows 2000和Windbg所带的帮助文件。 这篇文章得主要目的是介绍WINDBG的主要功能以及相关的命令。关于这些命令的详细语法,请参阅帮助文件。对文章中提到的许多命令,WINDBG有相应的菜单选项。 如何得到帮助 在命令(Command)窗口中输入.hh 命会调出帮助文件令。 .hh keyword 会显示关于keyword的详细命令。 启动Debugger Windbg可以用于如下三种调试: 远程调试:你可以从机器A上调试在机器B上执行的程序。具体步骤如下: ? 在机器B上启动一个调试窗口(Debug Session)。你可以直接在Windbg下运行一个程序或者将Windbg附加(Attach)到一个进程。 ? 在机器B的Windbg命令窗口上启动一个远程调试接口(remote): .server npipe:pipe=PIPE_NAME PIPE_NAME是该接口的名字。 ? 在机器A上运行: windbg –remote npipe:server=SERVER_NAME,pipe=PIPE_NAME SERVER_NAME是机器B的名字。 Dump文件调试:如果在你的客户的机器上出现问题,你可能不能使用远程调试来解决问题。你可以要求你的用户将Windbg附加到出现问题的进程上,然后在命令窗口中输入: .dump /ma File Name 创建一个Dump文件。在得到Dump文件后,使用如下的命令来打开它: windbg –z DUMP_FILE_NAME 本地进程调试:你可以在Windbg下直接运行一个程序: Windbg “path to executable” arguments 也可以将Windbg附加到一个正在运行的程序: Windbg –p “process id” Windbg –pn “process name”

Windbg的设置

Windbg的设置 Windbg本身可以直接从微软的网站上下载 下载地址:https://www.doczj.com/doc/d914734395.html,/whdc/devtools/debugging/default.mspx Windbg的设置其实主要是关于调试符号的设置,没有符号你会很不爽,会忽视掉许多细节,因此调试符号之于Windbg是非常重要的. 1.系统调试符号的设置 本帖隐藏的内容需要回复才可以浏览 首先找个空间足够的位置,XP sp2的调试符号完整一点大概需要1G的空间~~ 比如我是在D盘,建立一个MyLocalSymbols文件夹,用来存放系统的符号文件. 然后你可以从微软的网站上下载相应的调试符号包(大要180M~200M大小),要根据你虚拟机中的相应系统版本来下载,安装到MyLocalSymbols文件夹下. 当然,不安装符号包的话也可以设置成调试时自动从网上下载(即使你安装了符号包,有部分内容还是要到网上下载),具体怎么设置稍后讲. 不过我比较喜欢一次搞完,免得每次用的时候都要等它到网上下载比较慢~~ 2.自己的调试符号的设置 再建一个文件夹,用于存放我们自己编译出来的驱动的符号文件.单独存放,不要跟系统的混到一起. 我这里就仍在D盘建立一个MySysSymbols文件夹,用于存放自己的符号文件. 然后给这个文件夹创建一个快捷方式,把它放到C:\Documents and Settings\你的用户名\SendTo文件夹下. 这样,以后编译完驱动以后,直接在符号文件上右击->发送到"MySysSymbols"就可以了,很方便~~ 3.环境变量的设置 如果你想Windbg启动时自动识别符号路径的设置的话,我们就来建立一个环境变量 在"我的电脑"上右击,"属性"->"高级"->"环境变量",然后我们给当前用记新建一个名为 _NT_SYMBOL_PATH的环境变量 值为: D:\MyLocalSymbols;D:\MySysSymbols;SRV*D:\MyLocalSymbols*http://msdl.microsoft.c om/download/symbols 这样设置以后,系统的调试符号就在D:\MyLocalSymbols下,而我们自己驱动的调试符号就在 D:\MySysSymbols下 当符号文件不匹配时,Windbg会自动连网从https://www.doczj.com/doc/d914734395.html,/download/symbols下载符号文件到D:\MyLocalSymbols,下次再用到时就不用下载了 设置好保存就可以了,修改环境变量需要重新启动系统才能生效~ 到这里我再说一点,当你用了一段时间之后,常用的符号文件基本上就全有了,不想等,也可以用一些方法让Windbg马上下载符号文件 直接打一些正确的但是当前符号包中不正确或不匹配的符号名称可以"刺激"Windbg马上到网上下载,我为了节约时间就是这么干的.比如打dt nt!_KPCR,如果你的内核文件TimeDataStamp不匹配(内核等几个核心文件由于更新经常会这样)使得Windbg无法正确显示此符号,它就会马上乖乖地到网上把整个符号文件下载回来~~ 在调试符号基本全了以后(调试时基本不再出现Windbg再连网下载符号文件的情况),建议把环境变量中联网的部分去掉。以我的为例,就是设置成D:\MyLocalSymbols;D:\MySysSymbols

windbg,vm9双机调试无法连接解决方案

竭诚为您提供优质文档/双击可除windbg,vm9双机调试无法连接解决方案 篇一:4.双机调试的设置 1)配置windbg的环境,在path变量里,在变量值后面增加:;+windgb的安装目录 2)在环境变量里新建一个变量名称为_nt_symbol_path,变量值为 sRV*e:\symbol*https://www.doczj.com/doc/d914734395.html,/download/sy mbols,其中e:\symbol为你的symbol的安装时方的目录 3)右键新建快捷方式,地址为: "c:\programFiles\debuggingtoolsforwindows(x86)\wind bg.exe"-b-kcom:port=//./pipe/com_1,baud=115200,pipe 注意第二个"后面要有一个空格""里内容为windbg.exe的路径 4)点击下一步,完成了windbg的全部配置 5)编辑虚拟机设置 6)点击添加,选择串行端口 ,点击下一步 7)选择输出到命名管道,点下一步

8)下一步设置如下,这里要注意要设置成 //./pipe/com_1,如果设置 成了\\.\pipe\com_1那你就悲剧了,搞半天你会发现不知道哪里出问题了 9)点击完成,再点击确定完成串行端口的添加 10)启动Vm的操作系统,打开c盘,设置文件下选项,设置为不隐藏系 篇二:使用windbg进行双机内核调试 使用windbg进行双机内核调试 byxikug.xp 版本:1.0 作者:xikug/Rct xikug.xp[at]gmail[dot]com 我常去的网站: https://www.doczj.com/doc/d914734395.html,https://www.doczj.com/doc/d914734395.html, /retype/zoom/3344baf1ba0d4a7302763ab7pn=2&x=0&y=0&r aww=609&rawh=393&o=png_6_0_0_158_109_674_442_1207.8 _1105.74&type=pic&aimh=309.7536945812808&md5sum=2be 43f0646d2486c13559f7f8381b9c2&sign=4f39074f06&zoom= &png=159-9006&jpg=0-0"target="_blank">点此查看我们虚拟了一个串口对,com2-com3,这对串口是联通的。

windbg双机调试

心里总感觉 SOFTICE 的发展快到末路了。果然在 2006 年时Compuare 宣布停止 SOFTICE 开发。这里消息确实令很多人心痛。但与此同时,Windows 的配套调试器 windbg , cdb 等不断更新,功能不断强大,你必须选择它,虽然它内核调试速度不理想。后来我知道了 syser debuger, 国人写的不错的调试器,基本上 SOFTICE 命令等相似,上手很快,单机调试即可,速度挺快。但是要开发windows 内核程序,最好还是 windbg,至少 windbg 与系统的兼容肯定不会差吧。因为我自己的机器配置不高,所以平时玩的时候就用 syser , 但在公司真正解决问题时还是用 windbg。windbg 除了速度慢点(还能忍受,现在我公司的机器是AMD双核的),还有就是初次使用配制比较麻烦,你如果真实的使用 2 台机器调试那问题可能会更多。我每次重装系统后,都要上网找资料然后一遍遍配制挺烦人的,这次总结一下。 首先,先下载https://www.doczj.com/doc/d914734395.html,/download/symbols/packages/windowsxp/WindowsXP-KB835935 -SP2-slp-Symbols.exe?符号表,然后安装到真实系统中。 再下载https://www.doczj.com/doc/d914734395.html,/download/symbols/debuggers/dbg_x86_6.5.3.8.exe?WinDbg 程序的最新版本,同样也安装到真实系统中。 接下来我们要在虚拟机中装系统了,我用的是WinXP SP2。安装完成后修改boot.ini文件。在里面[operating systems]节中加入一行, " multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows?XP Professional - debug" /fastdetect /debug /debugport=com1 /baudrate=115200 " 随后关闭系统。配制虚拟机的硬件,点击 "Edit virtual machine settings",添加一个Serial Port,选择"Output to named pipe",然后下一步,第一框里保持默认的 "\\.\pipe\com_1" 第二框里选"This end is the server." 第三框里选"The other end is an application." 选中 "Connect at power on" 然后点击 "Advanced>>" 然后在新窗口中选中 "Yield CPU on poll"。保存退出。 好了,以上就是虚拟机系统要做的全部事情。 在真实系统中,我们要在设备管理器中。找到Com1口,然后再属性页中修改他的速率为115200。 然后为使用方便,创建一个WinDbg的快捷方式。快捷方式的命令行为 "C:\Program Files\Debugging Tools for Windows\windbg.exe" -y C:\Windows\Symbols\ -b -k com:port=\\.\pipe\com_1,baud=115200,pipe 这里面-y后面的路径就是我们前面安装符号表的路径。 使用时,首先运行虚拟机系统,到bootloader选择进入哪个系统的时候,我们先按一下上下,将倒计时停止。然后再到真实系统中运行刚才我们创建的WinDbg快捷方式。运行完成后再在虚拟系统中选择带有调试标志的系统即可。此时回到真实系统,稍等一会就可以看到WinDbg

相关主题
文本预览
相关文档 最新文档