Windows调试工具入门2(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简介WinDbg是微软发布的⼀款免费⽽⼗分强⼤的调试⼯具。
既然是微软⾃⼰发布的调试⼯具,那它对微软产品的调试当然是⼗分的强⼤。
Windows 调试器 (WinDbg) 可⽤于调试内核模式和⽤户模式代码,来分析故障转储,并检查代码时 CPU 寄存器执⾏,同时也是⼀款相当优秀的源码级(source-level)调试⼯具。
相⽐较于Visual Studio,它是⼀个轻量级的调试⼯具,所谓轻量级指的是它的安装⽂件⼤⼩较⼩,但是其调试功能,却⽐VS更为强⼤。
⼆、获取和安装2.1、获取途径可以将Windows调试⼯具作为开发⼯具包的⼀部分或作为独⽴⼯具集获取:作为WDK的⼀部分Windows的调试⼯具包含在Windows驱动程序⼯具包(WDK)中。
.作为Windows SDK的⼀部分Windows软件开发⼯具包(SDK)中包含Windows调试⼯具。
要下载安装程序或ISO映像,请参阅Windows开发⼈员中⼼上的作为独⽴的⼯具集通过开始安装Windows SDK,然后在要安装的功能列表中仅选择Windows的调试⼯具(并清除所有其他功能的选择),可以在不安装Windows SDK或WDK的情况下单独安装Windows的调试⼯具。
要下载安装程序或ISO映像,请参阅Windows开发⼈员中⼼上的2.2、安装安装过程略下⾯是安装后的截图作为独⽴⼯具集安装后作为SDK⼀部分安装后启动后的界⾯三、配置安装好之后就需要配环境变量,打开环境变量配置界⾯我的电脑->右键属性->⾼级系统设置->环境变量设置->在系统变量⾥找到path,把你的WinDbg安装⽬录写上去启动Windbg 打开⼀个exe看到这个说明配置成功四、功能Windbg是Microsoft公司免费调试器调试集合中的GUI的调试器,⽀持Source和Assembly两种模式的调试。
Windbg不仅可以调试应⽤程序,还可以进⾏Kernel Debug。
windbg使用方法
windbg使用方法Windbg是一款由Microsoft开发的强大的调试工具,它可以帮助开发人员诊断和解决Windows平台上的各种软件问题。
本文将介绍Windbg的基本使用方法,希望能够帮助读者更好地利用这一工具进行调试和分析。
首先,我们需要下载并安装Windbg工具。
可以在Microsoft官方网站上找到Windbg的安装包,并按照提示进行安装。
安装完成后,我们可以在开始菜单或者桌面上找到Windbg的快捷方式,双击打开即可进入工具界面。
在使用Windbg进行调试之前,我们需要先了解一些基本概念和操作。
首先是符号文件的设置,符号文件包含了程序中各个函数和变量的调试信息,可以帮助我们更好地进行调试。
在Windbg中,可以通过设置符号路径和加载符号文件来进行符号文件的管理。
接着是源代码的设置,如果我们有程序的源代码,可以通过设置源代码路径来进行源代码级别的调试。
最后是调试目标的设置,可以通过Attach或者Open Crash Dump来加载需要调试的程序。
接下来,我们来看一下Windbg的一些常用命令和功能。
在Windbg的命令行窗口中,可以输入各种命令来进行调试操作,比如设置断点、查看变量的值、跟踪函数的调用等。
此外,Windbg还提供了丰富的图形化界面,可以通过菜单栏和工具栏来进行各种调试操作,比如查看内存、查看寄存器、查看线程信息等。
除了基本的调试功能,Windbg还提供了一些高级的调试工具和扩展,比如分析内存泄漏、分析崩溃转储、分析性能问题等。
通过这些工具和扩展,我们可以更深入地了解程序的运行情况,找出潜在的问题并加以解决。
在使用Windbg进行调试的过程中,我们可能会遇到各种各样的问题和挑战,比如调试信息不够详细、调试速度太慢、调试过程中出现崩溃等。
针对这些问题,我们可以通过调整符号文件的设置、优化调试环境、使用合适的调试工具等方式来进行解决。
总的来说,Windbg是一款功能强大的调试工具,可以帮助我们更好地进行程序调试和分析。
WinDbg的使用与高级调试技巧
• 注册表的位置HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/AeDebug/Debugger
• WinDBG: "WinDbg的安装目录\windbg.exe" -p %ld -e %ld –g • Visual Studio: "C:\WINDOWS\system32\vsjitdebugger.exe" -p %ld -e %ld
• 快捷键,Ctrl+S
• 设置程序的源代码目录
• 快捷键,Ctrl+P
• 设置程序的二进制文件目录
• 快捷键,Ctrl+I
第一节:WinDbg的基本使用方法
• 选择可执行启动文件
• 通过菜单选择我们生成好的exe文件
第一节:WinDbg的基本使用方法
• 命令浏览窗口
• 打开exe程序后自动打开命令浏览窗口,浏览加载模块,符号文件,寄存器等等数据
• 常用的命令行
• dt 显示当前结构体成员 • k 显示当前堆栈
• lm 列出当前加载模块
• lsa 根据地址列出代码
第二节:生成dump与分析dump
• Dump文件的种类
• 用户模式dump文件 • 核心模式dump文件
• 用户模式dump文件的种类
• 完整用户模式dump(Full User-Mode Dumps) • Mini dump(Minidumps)
第四节:WinDbg高级调试技巧
• 追踪应用程序中的潜在堆异常
• 安装Application Verifier • Application Verifier • 运行时非托管代码检查工具 • 用于定位难于发现潜在的程序错误
使用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。
windoows 调试入门
Windows调试工具入门-2本篇介绍Windows调试工具的基本设置和基本操作方法。
这里我们会用一个测试程序一步一步说明如何使用WinDbg开始调试工作。
首先用VC建立一个名为TestDebug1的控制台项目,并生成它。
一、符号、源码和可执行映像路径设置使用WinDbg开始调试工作之前,最重要的就是配置好各种环境了。
这使得调试器可以正确识别调试目标中的各种变量、函数等等,使得我们能够进行符号化调试或者源码调试,而不是只能在一堆汇编代码中转圈。
首先来看一下未设置环境之前的样子。
使用刚才说的TestDebug1项目,为了对比更清晰,用Release进行编译,链接选项中选中生成map文件和调试信息,如下:在C/C++选项卡中设置如下:程序代码如下:#include "stdafx.h"#include <stdio.h>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,可以在调试器命令窗口中看到下面的内容:可以看到,调试器自动中断下来的位置并不是程序入口点,这是由WinDbg实现造成的,这里先不管它。
调试器命令窗口中可以看到,我们还没有设置符号路径,所以WinDbg目前还找不到TestDebug1.exe的任何符号文件。
windb 调试原理
windb 调试原理Windbg是一种强大的Windows调试工具,它可以用于分析和解决各种系统和应用程序的问题。
它提供了很多功能和命令,可以帮助开发人员和调试人员定位和修复程序中的错误。
本文将介绍Windbg调试的原理及其相关概念。
一、Windbg简介Windbg是由微软公司开发的一款免费的调试工具。
它可以在Windows操作系统上运行,并支持多种架构和平台。
Windbg可以连接到正在运行的进程或者通过调试器驱动程序连接到目标计算机上的内核模式进程。
它可以对进程进行实时监控,捕捉异常,查看内存和寄存器状态,以及跟踪函数调用等。
二、Windbg调试的原理Windbg调试的原理是通过在目标进程中注入调试器驱动程序来实现的。
当Windbg连接到目标进程时,它会将自己的调试器驱动程序加载到目标进程的地址空间中,并通过调试器驱动程序与目标进程进行通信。
调试器驱动程序可以截获目标进程的系统调用和异常,从而实现对目标进程的监控和控制。
三、Windbg调试的基本概念1. 符号表:符号表是一个存储了程序中函数和变量信息的数据库。
在调试过程中,Windbg可以使用符号表来解析函数和变量的名称和地址,从而方便开发人员进行代码分析和调试。
2. 断点:断点是调试过程中的一个重要概念,它可以让开发人员在程序执行到指定位置时中断程序的执行。
在Windbg中,可以通过命令设置断点,并在断点触发时查看程序的状态和调用栈信息。
3. 寄存器:寄存器是CPU中的一组特殊的存储单元,用于存储程序执行过程中的临时数据。
在Windbg中,可以查看和修改寄存器的值,以及使用寄存器的值来分析程序的执行流程。
4. 调用栈:调用栈是程序执行过程中的一个重要数据结构,用于保存函数调用的相关信息。
在Windbg中,可以查看和分析调用栈的信息,从而了解函数的调用关系和参数传递情况。
5. 内存窗口:内存窗口是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还提供了丰富的调试工具,比如内存窗口、寄存器窗口、线程窗口等,这些工具可以帮助我们更直观地了解程序的运行状态。
Windbg调试技巧
目录1Windbg简介 (1)2Windbg设置条件断点 (1)3事件处理与异常 (3)4调试dll和ocx控件 (6)5进程调试与程序死锁 (8)6结语 (11)关键词:软件调试,调试技巧,windbg摘要:Windbg是微软提供的一款免费的软件调试工具,具有强大的功能和扩展性,满足各种各样的调试需求。
本文对windbg进行了简单的介绍,对几个我比较关心的主题进行了详细的讲解,并给出了一些调试技巧,配合一些示例。
由于软件调试是一个广阔的领域,windg的命令使用与调试技巧也很多,本文也不能一一涉及,文章最后给出了一些参考资源,可以进一步深入研究。
1Windbg简介Windbg是微软开发的一款免费软件调试工具,WinDBG 是个非常强大的调试器,它设计了极其丰富的功能来支持各种调试任务,包括用户态调试、内核态调试、调试转储文件、远程调试等等。
WinDBG 具有非常大的灵活性和可扩展性,用来满足各种各样的调试需求,比如用户可以自由定义调试事件的处理方式,编写调试扩展模块来定制和补充WinDBG 的调试功能。
此外windbg通过SOS.dll支持可以调试.net应用程序,使得windbg成为windows下软件调试的首选。
WinDbg主要适用于以下这些场合:1.商业软件的Debug(缺乏源码)和客户支持(需要远程调试)2.内核驱动的调试,以及对驱动进行逆向工程时进行动态调试3.研究Windows本身的内核或者软件4.疑难BUG的调试,如死锁、COM调用、资源泄露、堆栈或者堆溢出5.以性能优化为目的的调试6.对调试目标基本不造成影响的非侵入式调试(windbg特有)Windbg具备极为强大的功能,可以调试可执行文件(exe),动态链接库(dll)、Activex控件,程序dump 文件和在运行进程,涵盖了软件调试的方方面面,windbg的操作命令和使用技巧也很多,这里仅列举我比较关心和常用的几个主题。
windbg用法
windbg用法Windbg是微软官方的调试工具,主要用于Windows操作系统和Microsoft Windows应用程序内核级别的调试。
以下是一些Windbg的基本用法:1. 启动Windbg:打开Windbg>文件>打开进程>选择需要调试的进程>打开。
2. 设置符号路径:Windbg默认不会自动找到包含符号信息的pdb文件,需要手动设置符号路径,否则可能出现无法识别符号的问题。
3. 设置断点:Windbg有多种设置断点的方法,包括使用命令行设置、使用界面设置等。
例如,可以使用“bu(break on access)”或“bp(break on process)”设置断点。
4. 执行程序:Windbg在程序执行过程中可以进行单步调试,可以使用“g(go)”命令继续执行代码,也可以使用“p(step into)”、“t(step over)”、“u(step out)”等命令逐行执行代码。
5. 查看调试信息:在Windbg中可以查看程序的调试信息,包括堆栈、寄存器、变量值、汇编代码等。
可以使用“!analyze”命令查看程序崩溃信息,还可以使用“!heap”、“!locks”等命令查看程序运行时的内存信息和锁定信息。
6. 输出调试信息:Windbg可以输出调试信息到文本文件中,可以使用“logopen”、“logappend”、“logclose”等命令将调试信息输出到指定的文件中。
7. 导出内存快照:在Windbg中可以使用“.dump”命令导出内存快照,也可以使用“!writecrashdump”命令将调试信息和内存快照导出到指定的文件中。
8. 反汇编代码:Windbg可以反汇编代码,可以使用“u”、“uf”、“uc”、“ud”等命令查看汇编代码。
以上是Windbg最基本的用法,更多高级用法请查看Windbg相关文档或其他相关资料。
windebug使用方法
windebug使用方法WinDbg 使用方法WinDbg 是一款强大的 Windows 调试工具,被广泛应用于开发人员和调试专家之间。
它提供了一系列功能,帮助用户分析和调试 Windows 操作系统、驱动程序和应用程序中的问题。
以下是 WinDbg 的使用方法。
1. 下载和安装 WinDbg:您可以从微软官方网站下载最新版本的 WinDbg。
安装过程很简单,按照向导提示逐步进行即可。
2. 配置符号路径:符号文件包含了源代码的调试信息,是进行高级调试的关键。
在 WinDbg 中,您需要配置符号路径以便正确加载符号文件。
您可以通过 "File" 菜单下的 "Symbol File Path" 选项来配置符号路径。
3. 载入调试目标:在 WinDbg 中,可以通过多种方式来载入调试目标。
您可以通过 "File" 菜单下的 "Open Crash Dump" 选项来打开崩溃转储文件,或者通过"File" 菜单下的 "Attach to Process" 选项来附加到正在运行的进程。
4. 设置断点:断点是调试过程中非常有用的工具,可以帮助您在应用程序中指定的位置停止执行。
在 WinDbg 中,可以通过输入 "bp <地址>" 命令来设置断点。
例如,"bp 0x00400000" 命令将在指定地址处设置一个断点。
5. 运行调试:一旦设置了断点并准备好调试,您可以通过 "Debug" 菜单下的"Go" 命令来开始运行调试过程。
当应用程序执行到断点处时,调试过程会自动停止。
6. 分析调试信息:当调试过程中断时,您可以使用 WinDbg 提供的各种命令和功能来分析调试信息。
例如,您可以使用 "p" 命令来显示变量的值,使用 "k" 命令查看调用栈,使用 "lm" 命令列出模块信息等。
WINDBG配置和使用
WinDbg配置和使用基础WinDbg是微软发布的一款相当优秀的源码级(source-level)调试工具,可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件。
1. WinDbg介绍:Debugging Tools and Symbols: Getting StartedA word for WinDbg2. WinDbg下载:Install Debugging Tools for Windows 32-bit VersionInstall Debugging Tools for Windows 64-bit Versions3. 配置WinDbg:运行WinDbg->菜单->File->Symbol File Path->按照下面的方法设置_NT_SYMBOL_PATH变量:在弹出的框中输入“C:\MyCodesSymbols;SRV*C:\MyLocalSymbols*/download/symbols”(按照这样设置,WinDbg将先从本地文件夹C:\MyCodesSymbols中查找Symbol,如果找不到,则自动从MS 的Symbol Server上下载Symbols)。
另一种做法是从这个Symbol下载地址中,下载相应操作系统所需要的完整的Symbol安装包,并进行安装,例如我将其安装在D:\WINDOWS\Symbols,在该框中输入“D:\WINDOWS\Symbols”。
(这里要注意下载的Symbols的版本一定要正确,在我的Win2003+Sp1上,我曾经以为安装Win2003+Sp2的Symbols可能会牛×点,但结果证明我错了,用WinDbg打开可执行文件时,提示“PDB symbol for mscorwks.dll not loaded;Defaulted to export symb ols for ntdll.dll”的错误,我有重新装上Win2003+Sp1的Symbols, 现在一切运行正常^_^)4. 使用WinDbg:WinDbg提供了图形界面和命令行两种运行方式。
Windbg的设置
Windbg的设置Windbg本身可以直接从微软的网站上下载下载地址:/whdc/devtools/debugging/default.mspxWindbg的设置其实主要是关于调试符号的设置,没有符号你会很不爽,会忽视掉许多细节,因此调试符号之于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会自动连网从/download/symbols下载符号文件到D:\MyLocalSymbols,下次再用到时就不用下载了设置好保存就可以了,修改环境变量需要重新启动系统才能生效~到这里我再说一点,当你用了一段时间之后,常用的符号文件基本上就全有了,不想等,也可以用一些方法让Windbg马上下载符号文件直接打一些正确的但是当前符号包中不正确或不匹配的符号名称可以"刺激"Windbg马上到网上下载,我为了节约时间就是这么干的.比如打dt nt!_KPCR,如果你的内核文件TimeDataStamp不匹配(内核等几个核心文件由于更新经常会这样)使得Windbg无法正确显示此符号,它就会马上乖乖地到网上把整个符号文件下载回来~~在调试符号基本全了以后(调试时基本不再出现Windbg再连网下载符号文件的情况),建议把环境变量中联网的部分去掉。
windbg gflags操作流程
windbg gflags操作流程Windbg是Windows平台上的一款强大的调试工具,可以用于分析和调试应用程序和操作系统。
Gflags是Windbg中的一个重要功能,可以用于设置全局标志位,从而在调试过程中提供更多的调试信息。
本文将详细介绍使用Windbg和Gflags的操作流程。
我们需要下载和安装Windbg工具。
可以从Microsoft官方网站上下载Windbg的最新版本,并按照安装向导进行安装。
安装完成后,我们可以在开始菜单中找到Windbg的快捷方式。
接下来,我们打开Windbg,并选择要调试的应用程序或操作系统。
可以通过"File"菜单中的"Attach to a Process"选项来选择正在运行的进程,或者通过"File"菜单中的"Open Crash Dump"选项来打开崩溃转储文件。
在Windbg的命令行中,我们可以使用Gflags命令来设置全局标志位。
Gflags命令的基本语法如下:```gflags [/p [/enable | /disable] [/full] [/offlinesymbolsp] [/user] [/kernel]] [imagefile]```其中,"/p"参数用于指定要设置标志位的进程或模块;"/enable"和"/disable"参数用于启用或禁用标志位;"/full"参数用于显示所有标志位的详细信息;"/offlinesymbolsp"参数用于禁用符号搜索路径;"/user"参数用于设置用户模式的标志位;"/kernel"参数用于设置内核模式的标志位;"imagefile"参数用于指定要设置标志位的映像文件。
windbg 基本命令
windbg 基本命令Windbg是一款强大的调试工具,广泛应用于Windows操作系统的开发和调试过程中。
本文将介绍Windbg的基本命令,帮助读者了解如何使用这些命令来进行调试和分析。
一、启动Windbg要启动Windbg,可以在命令行中输入"windbg"命令,或者在开始菜单中找到Windbg的快捷方式并点击打开。
启动后,会出现一个命令行窗口和一个图形界面窗口。
二、加载调试目标在Windbg中,需要加载一个调试目标,可以是一个可执行文件、一个进程或者一个内存转储文件。
加载调试目标的命令是"File"命令,可以通过命令行输入文件路径或者使用图形界面中的"File"菜单来加载。
三、设置调试符号路径调试符号是用于将二进制代码映射到源代码的关键信息。
在进行调试时,通常需要设置调试符号路径,以便Windbg能够正确地解析符号信息。
可以使用"SymPath"命令来设置调试符号路径,例如:```.symfix c:\symbols```四、设置断点断点是调试过程中的一个重要工具,可以在程序执行到指定位置时中断执行,以便进行调试和分析。
在Windbg中,可以使用"bp"命令来设置断点,例如:```bp mymodule!myfunction```五、运行调试目标设置好断点后,可以使用"g"命令来运行调试目标,程序会执行到第一个断点处并中断执行。
可以使用"p"命令来查看当前断点的位置和状态。
六、单步执行在调试过程中,可以使用单步执行命令来逐行执行程序,并观察程序的执行状态。
Windbg提供了多种单步执行命令,包括"t"命令(单步执行一条指令)、"p"命令(单步执行到下一个源代码行)等。
七、查看变量和内存在调试过程中,经常需要查看变量的值和内存的内容,以便分析程序的状态和执行结果。
Windows调试工具入门1(WinDbg调试工具介绍)
用户态调试方面:
Windows 调试工具包 OllyDbg
Visual Studio 调试器
原理
Windows 的用户程序调 Windows 的用户程 Windows 的用户程序调试
试支持
序调试支持
支持
系统和平 台支持
主要基于 NT 系统,9x 内核下支持不佳并且 需要安装附加模块
主要支持 NT 系统, 新版本的 VisualStudio 不 9x 下也可以使用 支持在 9x 系统下安装。
Windows 调试工具包中的调试器包括 WinDbg、KD、CDB 和 NTSD。其中, KD 用于 内核调试;CDB 和 NTSD 用于用户态调试,在功能和使用上几乎完全一致;WinDbg 是内 核调试器和用户态调试器的综合体,由于功能完善并且具有图形界面,所以是最常用的工具。 它们能够在 x86、Itanium 和 x64 机器上的所有 NT 平台操作系统中运行。
公司发布的软件,有用户反馈和 XXX 安全软件冲突老是造成系统崩溃, 但是搭建环境之后却又没有办法重现;对方是个普通用户,鼠标都抓得 不太稳。用户很火大,闹着要抓个老虎到公司来找你上司做俯卧撑,后 果很严重,怎么办?
在现实环境中,有很多复杂的调试场景,我们需要专业级的调试器来解决这些问题。而 WinDbg 恰恰提供了这种商业软件环境下的专业级软件调试功能,它和其他很多我们熟知的 调试器的区别也在于此。
驱动程序怎么才能源码调试?SoftICE 不支持新系统,我要在 Vista 上调试 怎么办?
软件中包含一个 Windows 服务组件,但是每次还没有登陆到桌面之前就 崩溃了,怎么进行动态调试?
我想调试 Explorer,调试 IE,调试 CSRSS,调试……,但是调试器一附 加上去,系统就会出问题。怎么办?
WinDbg 入门教程
WinDbg 入门教程介绍在我的职业生涯中,我看到我们大多数都是使用Visual Studio来进行调试,而不是用其它许多免费的调试器。
你可能有许多理由来使用这样的调试器,比如,在你家里的机器上没装开发环境,但是一个程序一次次的崩溃。
其实根据堆栈的dump就可以判断出IE的崩溃是否是由于一个第三方的插件。
对于WinDbg,我目前为止还没有发现很好的快速入门的教程。
这篇文章结合实例讨论了WinDbg的使用。
我首先假设你熟悉调试的基本概念:stepping in, stepping out,断点以及远程调试的基本概念。
注意,这本来是座位一个入门的文档,你可以阅读并且开始使用WinDbg. 如果对于特定的命令有疑问,请查阅WinDbg的文档。
你可以在任何微软提供的调试器中使用这篇文章中提到的命令,比如在VS的命令行窗口中。
这篇文章是基于WinDbg 6.3.这仅仅是一系列关于调试技术的文章中的第一篇。
在下一篇文章中,我会解释如何针对调试器编写扩展DLL.调试器一览下面大概介绍了你可以从微软网站上下载到的调试器:∙KD-内核调试器。
你可以用它来调试蓝屏一类的系统问题。
如果是开发设备驱动程序是少不了它的。
∙CDB-命令行调试器。
这是一个命令行程序∙NTSD-NT调试器。
这是一个用户模式调试器,可以用来调试用户模式应用程序。
它实际上是一个CDB的windows UI增强。
∙WinDbg-用一个漂亮的UI包装了KD和NTSD。
WinDbg即可以调试内核模式,也可以调试用户模式程序。
∙VS, -使用同KD和NTSD相同的调试引擎,并且相比于同样用于调试目的的WinDbg,提供了功能更丰富的界面。
调试器之间的比较WinDbgWinDbg实际上包装了NTSD和KD并且提供了一个更好用的用户界面。
它也提供了命令行开关,比如最小化启动(-m),附加到一PID指定的进程(-p)以及自动打开崩溃文件(-z)。
它支持三种类型的命令。
Windows调试工具入门3(WinDbg基本调试操作)
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键重复上⼀条命令。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Windows调试工具入门2—基本调试器设置设置Windows调试工具入门-2本篇介绍Windows调试工具的基本设置和基本操作方法。
这里我们会用一个测试程序一步一步说明如何使用WinDbg开始调试工作。
首先用VC建立一个名为TestDebug1的控制台项目,并生成它。
、源码和可执行映像路径设置符号、一、符号使用WinDbg开始调试工作之前,最重要的就是配置好各种环境了。
这使得调试器可以正确识别调试目标中的各种变量、函数等等,使得我们能够进行符号化调试或者源码调试,而不是只能在一堆汇编代码中转圈。
首先来看一下未设置环境之前的样子。
使用刚才说的TestDebug1项目,为了对比更清晰,用Release进行编译,链接选项中选中生成map文件和调试信息,如下:在C/C++选项卡中设置如下:程序代码如下:#include "stdafx.h"#include <stdio.h>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,可以在调试器命令窗口中看到下面的内容:可以看到,调试器自动中断下来的位置并不是程序入口点,这是由WinDbg实现造成的,这里先不管它。
调试器命令窗口中可以看到,我们还没有设置符号路径,所以WinDbg目前还找不到TestDebug1.exe的任何符号文件。
如果想在main函数下断,这时就不能使用符号,而只能直接使用main的地址。
使用命令bp 00401000在main函数设置断点,然后F5执行就可以中断到main的入口处了。
断点设置和基本操作我们将在后面介绍。
可以在反汇编窗口中看到这样的内容:由于没有加载任何符号,所以我们看到的都是一堆反汇编代码和地址。
在上一篇中已经介绍过,WinDbg不像OllyDbg这些调试器一样拥有强大的反汇编分析能力,所以仅仅靠这些看起来一团乱麻的反汇编代码,调试工作是很难开展下去的。
符号路径的设置要想在WinDbg中看到程序中的符号,必须通过命令或者WinDbg菜单设置符号路径。
如果还设置了Microsoft公共符号存储的话,我们不但能够看到自己程序中的符号,还能够看到Windows平台代码中的符号,这对于调试会提供很好的帮助。
所谓符号路径,就是包含了程序符号信息的符号文件所在的目录路径。
通常我们接触到的符号文件都是以pdb作为后缀名的。
TestDebug1.exe项目如果在项目设置的Link选项中选中了生成调试信息的话(如上图中的Generate debug info),那么可以在Debug或者Release目录中找到它的符号文件TestDebug1.pdb。
我们通过WinDbg的File->Symbol File Path…菜单,或者命令.sympath设置符号路径为TestDebug1.pdb所在的目录。
例如刚才我把生成的pdb文件移动到桌面上了,所以在我的机器上就设置为:完成之后在命令窗口输入.reload命令,我们可以看到反汇编窗口的内容发生改变:这里就已经可以看到TestDebug1.exe中的函数、变量名这样的符号了。
而我们也可以通过bp main这样的命令直接使用符号来操作调试器。
另外,在Local、Watch等窗口中也可以直接使用符号名查看到变量的值、在Call Stack 窗口中可以看到函数名,等等。
源码路径的设置通过上面的设置,我们可以对程序进行符号化调试。
如果拥有程序的代码,还可以通过设置源码路径来进行源码级调试。
继续上面的工作,我们通过WinDbg的File->Source File Path…菜单或者.srcpath命令设置源代码保存的路径,比如我的机器上是这样:确定之后,如果当前指令指针在源文件的代码范围内,就会自动跳出源文件窗口。
如果没有跳出,那么可以通过File->Open Source File…菜单手动打开源文件。
由于刚才设置的断点还没有删除,所以在源码窗口也能口看到设断的行被高亮了:之后就基本上可以完全通过源码窗口进行设置断点、查看变量、跟踪代码等操作。
比只有符号的时候方便了很多。
可执行映像路径的设置可执行映像路径一般在调试dump文件时才用得上。
需要将这个路径设置成要调试的exe、dll、sys等可执行文件的路径。
可以通过File->Image File Path…菜单或者.exepath命令设置。
使用微软公共符号存储除了使用自己程序的符号之外,调试时还可以使用微软提供的Windows系统代码的符号。
这需要修改一下我们设置的符号路径。
最方便的办法是使用.symfix命令。
现在我们来看一下kernel32.dll中的代码,在反汇编窗口的Offset栏中填入kernel32!OpenProcess,在我的机器上代码如下:注意位于764e8ccf处的那个call,现在只能看到调用了kernel32某个偏移处的地址。
使用命令.symfix+ d:\Symbols命令,注意加号要紧靠前面的文本。
d:\Symbols 是用来保存下载的符号文件的目录,可以修改成自己需要的路径。
再来打开符号路径窗口,我们可以看到调试器自动添加了一些内容:自己在源码路径中加入这些新的内容也可以实现相同的效果。
详细的原理请参考WinDbg 帮助文档关于符号服务器设置的部分内容。
接下来再次使用.reload 命令重新加载符号,第一次使用到的符号文件会从网上自动下载下来,所以可能有时候会等待一会。
完成之后,可以看到反汇编窗口中出现了新的符号内容:764e8cd8处指令中可以看到这是调用了kernel32导入的函数NtOpenProcess 。
微软提供的Windows 符号是我们研究Windows 实现的必备利器。
首先,符号化的名字有助于调试过程中的记忆和对各种信息的识别;其次,通过名字就常常可以猜测出来函数或变量的作用,很大的方便调试。
在各种调试应用中,都强烈建议添加微软公共符号的引用。
设置环境变量上面介绍的各种路径都可以通过环境变量来进行设置。
将一些常用的路径保存在环境变量中,就可以避免每次在新的工作空间中进行调试时都要重新设置的麻烦。
另外,Visual Studio 2008也共享一些环境变量的设置,这样在使用IDE 调试的时候也能方便的查看到各种符号了。
常用的有下面几个: 环境变量环境变量 作用作用 _NT_SOURCE_PATH = Path 指定包含调试目标的源代码的路径。
Path 可以包含后跟一个冒号(:)的驱动器符。
用分号分隔多个目录(;)。
_NT_SYMBOL_PATH = Path指定包含符号文件的目录树的根目录。
Path 可以包含后跟一个冒号(:)的驱动器符。
用分号分隔多个目录(;)。
_NT_EXECUTABLE_IMAGE_PATH = Path 指定包含二进制可执行文件的路径。
Path可以包含后跟一个冒号(:)的驱动器符。
用分号分隔多个目录(;)。
_NT_DEBUG_LOG_FILE_OPEN = Filename (仅CDB和KD) 指定调试器用来记录输出的日志文件。
_NT_DEBUG_LOG_FILE_APPEND = Filename (仅CDB和KD) 指定调试器用来添加输出的日志文件。
新的内容每次会添加到这个文件末尾,而不是覆盖整个文件。
如果设置了符号路径的环境变量的话,可能在初期使用VS 2008调试MFC 这样的有较多导入库的程序时会下载很多符号文件,使得启动调试的速度变慢。
不过经过一段时间,大部分需要的符号都缓存到本地之后速度就会快起来。
二、配置日志文件进行调试时,有时候调试器命令窗口会变得很杂乱,所以常常想用.cls命令清空它。
但是这样会无法再看到之前调试过程中输出的结果。
另外,有时候想保存下整个调试过程的详细记录以备后面“回味”。
这时,就需要用到日志文件了。
可以将调试器命令窗口中出现过的所有内容都自动记录到日志文件中。
创建日志文件:•(仅CDB 和KD) 启动调试器之前,设置_NT_DEBUG_LOG_FILE_OPEN环境变量。
•启动调试器时,使用-logo 命令行选项。
如-logo d:\logs\mylogfile.txt•使用.logopen命令。
如.logopen /t d:\logs\mylogfile.txt•(仅WinDbg) 使用Edit->Open/Close Log File菜单命令。
将日志添加到已有的文件末尾:•(仅CDB 和KD) 启动调试器之前,设置_NT_DEBUG_LOG_FILE_APPEND环境变量。
•启动调试器时,使用-loga命令行选项。
如-loga d:\logs\mylogfile.txt•使用.logappend命令。
如. logappend/t d:\logs\mylogfile.txt•(仅WinDbg) 使用Edit->Open/Close Log File菜单命令,然后选择Append。
关闭日志文件:•使用.logclose命令•(仅WinDbg) 使用Edit->Open/Close Log File菜单命令,然后选择Close Open Log File。
三、设置工作空间工作空间(Workspace)是用来保存WinDbg中工作环境的工具。
例如习惯的窗口布局方式、符号路径、异常处理的设置等等,都可以通过工作空间保存下来,在下次调试的时候就不用再次设置了。
相关的设置都可以通过WinDbg菜单来完成,有下面几个:Open Workspace:这里只能打开自己通过SaveAs保存的工作空间。
Save Workspace:按默认的方式保存当前的工作空间。
下次再打开相同的调试目标时,就会自动打开这个Workspace。
Save Workspace As:可以自己设置工作空间的名字,这样就能通过Open Workspace来手动打开。
Clear Workspace:可以选择保存工作空间时要保存哪些设置。
Delete Workspace:删除当前保存的工作空间。