Windows调试工具入门3(WinDbg基本调试操作)
windbg 调试驱动教程

使用WinDbg和虚拟机调试Windows驱动程序教程(转)驱动调试攻略(WinDbg)驱动调试是一个系统级调试方式,所以调试工具用WinDbg是最佳选择。
驱动调试一般情况下,需要两台电脑进行。
一台作为主机进行驱动调试,另一台作为目标机进行驱动安装。
当然如果没有多余的电脑,我们可以安装VMware模拟系统调试(虚拟机)。
只是对电脑的配置要求比较高。
本文介绍使用WinDbg及VMware进行调试的具体设置及方法。
这些资料在网络很难找到,笔者也是吸取了他人很多宝贵意见才完成的,供大家学习讨论。
其实用SoftIce可以单机调试驱动,但是有个问题就是在SoftIce启动前驱动可能已经启动了。
VMware Support 中说,自4.0.18.0 版本之后的WinDbg 都支持了通过pipe 来进行调试,不过微软对此并没有任何说明。
所以,在VMware中虚拟被调试的系统,然后通过VMware 虚拟一个com端口。
使用这个虚拟的端口,就可以用WinDbg 进行调试了。
具体步骤如下:1. 安装和设置WinDbg,VMware首先,请到微软官方网站/whdc/devtools/debugging/default.mspx,下载最新版本的WinDbg工具,建议使用6.0以上版本的WinDbg做为调试工具。
VMware也可以在网站上找到,当然使用高版本比较好。
安装过程比较简单,就不在此多做介绍。
唯一要注意的是,安装完虚拟机后,请在VMware主菜单“VM”中选择“Install VM Tools…”,完成系统驱动文件的安装。
安装完这两个软件后,请在VMware中安装跟你的电脑版本相同的操作系统。
例如:你的电脑安装的是WindowsXP Professional,那么最好在Vmware中安装相同版本。
至少是相同的系统,Windows XPßà Windows XP、Windows 2000ßà Windows 2000。
windbg使用方法

windbg使用方法Windbg是一款由Microsoft开发的强大的调试工具,它可以帮助开发人员诊断和解决Windows平台上的各种软件问题。
本文将介绍Windbg的基本使用方法,希望能够帮助读者更好地利用这一工具进行调试和分析。
首先,我们需要下载并安装Windbg工具。
可以在Microsoft官方网站上找到Windbg的安装包,并按照提示进行安装。
安装完成后,我们可以在开始菜单或者桌面上找到Windbg的快捷方式,双击打开即可进入工具界面。
在使用Windbg进行调试之前,我们需要先了解一些基本概念和操作。
首先是符号文件的设置,符号文件包含了程序中各个函数和变量的调试信息,可以帮助我们更好地进行调试。
在Windbg中,可以通过设置符号路径和加载符号文件来进行符号文件的管理。
接着是源代码的设置,如果我们有程序的源代码,可以通过设置源代码路径来进行源代码级别的调试。
最后是调试目标的设置,可以通过Attach或者Open Crash Dump来加载需要调试的程序。
接下来,我们来看一下Windbg的一些常用命令和功能。
在Windbg的命令行窗口中,可以输入各种命令来进行调试操作,比如设置断点、查看变量的值、跟踪函数的调用等。
此外,Windbg还提供了丰富的图形化界面,可以通过菜单栏和工具栏来进行各种调试操作,比如查看内存、查看寄存器、查看线程信息等。
除了基本的调试功能,Windbg还提供了一些高级的调试工具和扩展,比如分析内存泄漏、分析崩溃转储、分析性能问题等。
通过这些工具和扩展,我们可以更深入地了解程序的运行情况,找出潜在的问题并加以解决。
在使用Windbg进行调试的过程中,我们可能会遇到各种各样的问题和挑战,比如调试信息不够详细、调试速度太慢、调试过程中出现崩溃等。
针对这些问题,我们可以通过调整符号文件的设置、优化调试环境、使用合适的调试工具等方式来进行解决。
总的来说,Windbg是一款功能强大的调试工具,可以帮助我们更好地进行程序调试和分析。
使用Windbg双机调试驱动

困扰我多天的问题终于在今天解决了,感觉很轻松啊!调试Windows内核程序不能象r3层的应用层一样,可以随便调试!毕竟人家是运行在r0层的!你要是设置中断的话,会导致整个操作系统暂停!据说以前都使用SoftICE调试,这个是一个单机调试的软件,使用后会使系统很不稳定,后来NuMega公司宣布停止SoftICE的开发,因此估计现在也不太会有人用了!!微软出的WinDbg是利用双机调试的一款软件,当然按照书上说的,肯定使用虚拟机和主机这样“双”机调试!在调试的时候要设置很多东西,我就是因为设置这些东西困惑了我整整半个学期!现在我把自己的设定写一下,也是根据书上的,但是书上说的实在是他娘的太模糊了!!下载安装winDbg和VMWare虚拟机我就不说了,已经虚拟机安装xp系统!先在虚拟机的windows安装目录下C盘下有个boot.ini(当然是处于隐藏状态,选择工具-》文件夹选项-》把隐藏受保护的操作系统文件这个选项去掉)修改boot。
ini内容改为[boot loader]timeout=30default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS[operating systems]multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect /noguibootmulti(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect /debug/debugport = com1/baudrate=115200// 红色我本机绿色背景的是增加的[boot loader]timeout=5default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS[operating systems]multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetectC:\GHLDR=一键GHOST v2010.10.10然后关闭虚拟机系统,在VMware的Commands栏中单击Edit virtual machine setting“,选择Hardware页,然后单击Add,选择Serial Port(串口),单击下一步,选择Output to named pipe 单击下一步,保持前2个不变,分别为\\.\pipe\com_1和This end is the server,第三个修改为The other end is an application,这样虚拟机就算设置好了,接下来设置主机,转到你安装WinDbg的目录下,然后右击WinDbg。
windows系统蓝屏分析修复工具WinDbg(32位64位)及教程

windows系统蓝屏分析修复工具WinDbg(32位/64位)及教程Windbg是一款经典的windows系统蓝屏分析修复工具,可以通过对dmp文件的分析和定位,分析并解决蓝屏、程序崩溃(IE崩溃)等问题,有了Windbg大家不会再对蓝屏茫然无措了,如果你遇到了头疼的蓝屏问题,试试这个windows系统蓝屏分析修复工具这个绿色软件吧。
windows系统蓝屏分析修复工具使用注意事项:符号表是Windbg关键的“数据库”,如果没有它,WinDbg基本上就是个废物,无法分析出更多问题原因。
所以使用Windbg设置符号表,是必须要走的一步。
1、运行Windbg软件,然后按【Ctrl+S】弹出符号表设置窗2、将符号表地址:SRV*C:\Symbols*/download /symbols粘贴在输入框中,点击确定即可。
温馨提示:红色字体为符号表本地存储路径,建议固定路径,可避免符号表重复下载。
windows系统蓝屏分析修复工具简单的使用教程简介:当你拿到一个dmp文件后,可使用【Ctrl+D】快捷键来打开一个dmp文件,或者点击WinDbg界面上的【File=>Open Crash Dump...】按钮,来打开一个dmp 文件。
第一次打开dmp文件时,可能会收到如下提示,出现这个提示时,勾选“Don't ask again in this WinDbg session”,然后点否即可。
当你想打开第二个dmp文件时,可能因为上一个分析记录未清除,导致无法直接分析下一个dmp文件,此时你可以使用快捷键【Shift+F5】来关闭上一个dmp分析记录。
到这里关于windows系统蓝屏分析修复工具的使用已经介绍完了,简单的Windbg使用相信大家已经没有任何问题了。
windb 调试原理

windb 调试原理Windbg是一种强大的Windows调试工具,它可以用于分析和解决各种系统和应用程序的问题。
它提供了很多功能和命令,可以帮助开发人员和调试人员定位和修复程序中的错误。
本文将介绍Windbg调试的原理及其相关概念。
一、Windbg简介Windbg是由微软公司开发的一款免费的调试工具。
它可以在Windows操作系统上运行,并支持多种架构和平台。
Windbg可以连接到正在运行的进程或者通过调试器驱动程序连接到目标计算机上的内核模式进程。
它可以对进程进行实时监控,捕捉异常,查看内存和寄存器状态,以及跟踪函数调用等。
二、Windbg调试的原理Windbg调试的原理是通过在目标进程中注入调试器驱动程序来实现的。
当Windbg连接到目标进程时,它会将自己的调试器驱动程序加载到目标进程的地址空间中,并通过调试器驱动程序与目标进程进行通信。
调试器驱动程序可以截获目标进程的系统调用和异常,从而实现对目标进程的监控和控制。
三、Windbg调试的基本概念1. 符号表:符号表是一个存储了程序中函数和变量信息的数据库。
在调试过程中,Windbg可以使用符号表来解析函数和变量的名称和地址,从而方便开发人员进行代码分析和调试。
2. 断点:断点是调试过程中的一个重要概念,它可以让开发人员在程序执行到指定位置时中断程序的执行。
在Windbg中,可以通过命令设置断点,并在断点触发时查看程序的状态和调用栈信息。
3. 寄存器:寄存器是CPU中的一组特殊的存储单元,用于存储程序执行过程中的临时数据。
在Windbg中,可以查看和修改寄存器的值,以及使用寄存器的值来分析程序的执行流程。
4. 调用栈:调用栈是程序执行过程中的一个重要数据结构,用于保存函数调用的相关信息。
在Windbg中,可以查看和分析调用栈的信息,从而了解函数的调用关系和参数传递情况。
5. 内存窗口:内存窗口是Windbg中的一个功能,可以用来查看和修改目标进程的内存数据。
windbg gflags操作流程

windbg gflags操作流程Windbg是一种Windows操作系统的调试工具,它可以帮助开发人员分析和调试应用程序的崩溃和性能问题。
Gflags是Windbg的一个重要组成部分,它提供了一种简便的方式来配置系统的全局标志和调试标志。
本文将介绍如何使用Windbg和Gflags进行调试和性能分析的操作流程。
第一步:安装Windbg和配置符号文件路径我们需要安装Windbg调试工具,并配置符号文件路径。
符号文件包含了应用程序的调试信息,可以帮助开发人员更方便地分析崩溃和性能问题。
在Windbg安装目录下,找到“sym”文件夹,将符号文件下载到该文件夹中。
然后,在Windbg的命令行中输入以下命令来配置符号文件路径:.sympath+ C:\Sym其中,C:\Sym是符号文件路径的根目录,可以根据实际情况进行修改。
第二步:启动Windbg并加载应用程序打开Windbg,选择“文件”菜单中的“打开进程”选项,然后在弹出的对话框中输入应用程序的可执行文件路径。
点击“确定”按钮后,Windbg会加载该应用程序并暂停在入口点处。
第三步:设置断点和观察点在Windbg的命令行中,输入以下命令来设置断点:bp symbol其中,symbol是要设置断点的函数名或地址。
通过设置断点,我们可以在应用程序执行到特定位置时中断程序的执行,以便进行调试和分析。
除了设置断点,我们还可以设置观察点来监视特定的变量或内存地址的值。
在Windbg的命令行中,输入以下命令来设置观察点:ba r/w size address其中,size是要监视的内存块的大小,address是要监视的内存地址。
通过设置观察点,我们可以在特定的内存地址发生变化时中断程序的执行,以便进行调试和分析。
第四步:运行应用程序并触发断点和观察点在Windbg的命令行中,输入“g”命令来继续执行应用程序。
当应用程序执行到设置的断点或观察点处时,Windbg会中断程序的执行,并显示相关的调试信息。
学会使用电脑的调试工具

学会使用电脑的调试工具在当今信息化时代,电脑已经成为我们生活和工作中必不可少的工具。
然而,由于软硬件的繁杂性,我们在使用电脑过程中常常会遇到各种问题和bug。
为了解决这些问题,学会使用电脑的调试工具将成为我们提高工作效率的关键。
本文将介绍几种常用的电脑调试工具和它们的使用方法。
一、任务管理器任务管理器是Windows系统自带的一款常用调试工具,在遇到电脑卡顿或程序无响应的情况下,它可以帮助我们找到问题的症结。
使用任务管理器,我们可以查看系统资源的使用情况,关闭卡死的进程,或开启新的任务,从而恢复电脑的正常运行。
在Windows系统中,按下Ctrl+Shift+Esc快捷键可以直接打开任务管理器。
在任务管理器的“进程”选项卡中,我们可以看到当前正在运行的所有进程及其所占用的资源。
通过观察CPU、内存和磁盘使用率,我们可以找到系统中占用大量资源的进程,并对其进行优化或关闭。
二、代码编辑器调试工具对于从事软件开发的人员来说,代码编辑器的调试工具是必不可少的。
常见的代码编辑器如Visual Studio Code、PyCharm等都提供了强大的调试功能,帮助开发者查找问题和解决bug。
以Visual Studio Code为例,它内置了调试功能,可以在代码中设置断点,逐行调试程序。
当程序运行到断点处时,我们可以查看变量的值,进行单步调试,或者观察函数的调用栈,从而分析问题所在。
此外,Visual Studio Code还支持对应用程序的远程调试,方便我们在客户端出现问题时进行调试和排查故障。
三、网络调试工具在进行网络开发或者维护时,网络调试工具是不可或缺的帮手。
常见的网络调试工具有Wireshark、Postman等。
Wireshark是一款网络抓包工具,通过监听网络接口,它可以捕获和分析网络数据包,在网络故障排查和网络优化中发挥着重要作用。
我们可以在Wireshark中查看网络通信的详细信息,包括请求方法、响应状态码、请求头、响应体等,从而找到网络中的问题所在。
windbg使用方法

windbg使用方法Windbg是一款由微软公司开发的调试工具,它可以帮助开发人员分析和诊断Windows操作系统和应用程序的问题。
本文将介绍Windbg的基本使用方法,希望能够帮助读者更好地利用这个工具进行调试和分析。
首先,我们需要了解如何安装Windbg。
通常情况下,Windbg是作为Windows驱动程序开发工具包(Windows Driver Kit)的一部分发布的,也可以在微软的官方网站上下载到独立安装包。
安装完成后,我们可以在开始菜单或者安装目录中找到Windbg的可执行文件。
接下来,我们需要了解如何打开并配置Windbg。
在打开Windbg 后,我们可以通过“文件”菜单中的“符号文件路径”选项来设置符号文件的路径,以便Windbg能够正确地加载符号文件。
符号文件对于调试非常重要,它包含了源代码和可执行文件之间的映射关系,能够帮助我们更好地理解程序的运行状态。
在Windbg中,我们可以通过“文件”菜单中的“打开转储文件”选项来打开需要分析的转储文件(dump file)。
转储文件是程序崩溃时生成的一种内存快照,包含了程序崩溃时的内存状态和调用栈信息。
通过分析转储文件,我们可以找出程序崩溃的原因,并进行相应的调试和修复。
除了分析转储文件外,我们还可以通过“调试”菜单中的“附加到进程”选项来附加到正在运行的进程,以实时地监视和分析程序的运行状态。
这对于调试一些无法通过转储文件分析的问题非常有帮助,比如内存泄漏、死锁等问题。
在Windbg中,我们可以使用各种命令来进行调试和分析。
比如,通过“!analyze”命令可以自动分析转储文件,并给出可能的崩溃原因;通过“kb”命令可以查看当前线程的调用栈信息;通过“!heap”命令可以查看进程的堆内存分配情况等等。
熟练掌握这些命令对于高效地进行调试和分析非常重要。
除了命令之外,Windbg还提供了丰富的调试工具,比如内存窗口、寄存器窗口、线程窗口等,这些工具可以帮助我们更直观地了解程序的运行状态。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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 <stdio.h>int main(int argc, char* argv[]){int i = 0;while( 1){printf( "TestDebug1.cpp:%d\r\n", i);}return 0;}为了方便,这次使用Debug选项来重新编译它,这样就不用再设置编译选项和WinDbg 选项来查看符号了。
使用WinDbg菜单的File->Open Executable…打开TestDebug1.exe,中断下来之后F5继续运行。
由于是个死循环,所以目标不会自己停止下来,可以看到WinDbg 的调试器命令窗口一直处于禁用状态。
在WinDbg窗口按下CTRL+BREAK,TestDebug1.exe 就中断到调试器中了,使用u命令查看当前正在执行的代码,k命令查看当前调用堆栈:看调用堆栈和反汇编出来的代码,似乎和TestDebug1.cpp中的代码没有任何关系,这是为什么呢?注意到底部提示符位置显示的是0:001>,说明这是1号线程,而正常情况下线程编号都是从0开始的。
我们继续用~命令来查看被调试进程中的线程信息,出现的是类似这样的输出:0:001> ~0 Id: 1998.1358 Suspend: 1 Teb: 7ffde000 Unfrozen. 1 Id: 1998.17f8 Suspend: 1 Teb: 7ffdd000 Unfrozen每一行是一个线程的信息。
第一行中,0表示这个进程的编号;1998.1358是16进制数字,前者是当前进程的进程ID,后者是线程ID;后面的信息是线程状态和Teb地址。
第二行的线程编号前有一个点号“.”,表示这是当前线程,也就是刚才使用u和k命令查看到的线程。
我们的代码中并没有任何创建线程的操作,为什么会多出一个线程来呢?这是由于WinDbg中断运行中的调试目标的方式造成的。
按下CTRL+BREAK之后,WinDbg会在调试目标的进程中创建一个远线程,并在这个远线程中执行ntdll!DbgBreakPoint函数,即上面u命令所显示出来的内容。
它会在目标进程中产生一次int3异常,这个异常被WinDbg捕获,所以TestDebug1.exe就中断到调试器中了。
因此,当采用CTRL+BREAK这种方式中断目标之后,看到的代码是在这个远线程中的,如果要查看调试目标正在执行的代码就需要切换当前线程。
可以使用~Thread s命令。
如下:这里就可以清楚看到在main函数中的print调用产生的调用堆栈了。
除了采用CTRL+BREAK这样直接中断运行中目标的方式之外,当调试目标发生异常、退出或者遭遇断点等事件时,也会自动中断到调试器中。
这时就不会出现额外的线程了。
内核调试时中断目标机的操作和用户模式下一样。
2.控制目标的执行调试目标中断之后,就可以通过单步或者跟踪指令来控制它执行了。
WinDbg中的单步操作快捷键和Visual Studio调试器中相同。
也是F5运行、F10逐过程单步、F11逐语句单步。
需要注意的是,单步的定义在汇编模式调试和源码模式调试时是不一样的。
汇编模式调试时,每次单步执行一条指令;源码模式调试时,每次单步执行一行源码。
点击工具栏上的按钮或使用l-t命令来启用汇编模式;点击工具栏上的或使用l+t命令来启用源码模式。
控制目标执行的命令分为三大类。
g*类的命令用于直接运行目标、p*类的命令用于单步执行、t*类的命令类似p*命令,但是当遇到call 指令时会跟踪进去。
下面是这些命令的列表,摘自WinDbg 帮助文档:命令命令 WinDbg 按钮WinDbg 命令命令 WinDbg 快捷键作用作用Debug | Run to Cursor F7CTRL + F10(仅WinDbg) 运行到光标位置。
Debug | Stop DebuggingSHIFT + F5 停止所有的调试并关闭目标。
(仅CDB/KD) CTRL+C Debug | Break CTRL +BREAK停止执行,调试器中断目标。
.restart (Restart TargetApplication)Debug | Restart CTRL + SHIFT + F5(仅User mode) 重起目标程序g (Go)Debug | GoF5 目标自由执行。
gc (Go from Conditional Breakpoint)在一次条件断点之后恢复执行。
gh (Go with Exception Handled) Debug | Go Handled Exception和g (Go)相同,但是当前异常被当作已处理。
gn (Go with Exception Not Handled) Debug | Go Unhandled Exception和g (Go)相同,但是当前异常被当作未处理。
gu (Go Up)Debug | Step Out目标运行到当前函数执行完成。
p (Step)Debug | Step Over目标执行一条指令。
如果该指令是函数调用,则这个调用被当作一步执行。
pa (Step to Address)目标运行直到到达指定的地址。
该函数中执行的每一步都会显示出来(但是不显示被调用的函数中的内容。
) pc (Step to目标运行直到遇到Next Call)下一个call 指令。
如果当前指令是call ,则这个call 会被完成并执行到下一个call 。
pct (Step to Next Call or Return)目标继续执行,直到遇到一个call 指令或者return 指令。
ph (Step to NextBranching Instruction)目标执行,直到到达任何一种分支指令,包括条件和非条件分支、call 调用、函数返回和系统调用。
pt (Step to Next Return)目标执行,直到遇到return 指令。
t (Trace)Debug | Step IntoF11 F8 目标执行一条指令。
如果该指令是一条call ,调试器跟踪到这个call 中。
ta (Trace to Address)目标执行直到指定地址。
本函数和被调用函数中的每一步都会显示出来。
tb (Trace to Next Branch)(除内核模式之外的所有模式,仅在基于x86的系统上)目标运行到下一条分支指令。
tc (Trace to Next Call)目标运行到下一条call 指令。
如果当前指令是call ,该命令会跟踪进去直到遇到另一条call 。
tct (Trace to Next Call or Return)目标运行到下一条call 指令或return 指令。
如果当前指令是call 或return ,命令会跟踪进去知道遇到另一个call 或return 。
th (Trace to Next目标执行直到遇到任意类型的分支指Branching Instruction)令,包括条件和非条件跳转、call、return和系统调用。
如果当前指令是分支指令,该命令跟踪进入直到遇到下一个分支指令。
tt (Trace to Next Return)目标运行直到遇到return指令。
如果当前指令是一条return,则跟踪进入直到另外一条return。
wt (Trace and Watch Data)目标执行,直到指定的函数执行完成。
这时会显示统计信息。
三、使用断点合理、巧妙的设置断点是软件调试中的一门艺术,好的断点能使调试工作事办功倍。
WinDbg中提供了丰富的断点命令,下面通过示例对这些命令进行简单的介绍。
在上面的项目中,添加了一个dll项目,名为TestDebugDll1。
修改一下上面的TestDebug1.cpp如下(整个项目可以下载附件):#include "stdafx.h"#include <stdio.h>#include <windows.h>class CTestClass{public:CTestClass(){};~CTestClass(){};void SetChar( unsigned char ucChar){m_ucTestChar = ucChar;}protected:unsigned char m_ucTestChar;};int main(int argc, char* argv[]){typedef int (*pfnTestDllAdd)( int a, int b);int i;HMODULE hMod = LoadLibraryA( "TestDebugDll1.dll");pfnTestDllAdd TestDllAdd = (pfnTestDllAdd)::GetProcAddress( hMod, "TestDllAdd");if ( TestDllAdd){i = TestDllAdd( 1, 2);}CTestClass objTestClass;objTestClass.SetChar( 123);return 0;}还是使用Debug选项,重新编译。