实现windbg与VMware的单机调试
windbg双机调试
心里总感觉 SOFTICE 的发展快到末路了。
果然在 2006 年时Compuare 宣布停止 SOFTICE 开发。
这里消息确实令很多人心痛。
但与此同时,Windows 的配套调试器 windbg , cdb 等不断更新,功能不断强大,你必须选择它,虽然它内核调试速度不理想。
后来我知道了 syser debuger, 国人写的不错的调试器,基本上 SOFTICE 命令等相似,上手很快,单机调试即可,速度挺快。
但是要开发windows 内核程序,最好还是 windbg,至少 windbg 与系统的兼容肯定不会差吧。
因为我自己的机器配置不高,所以平时玩的时候就用 syser , 但在公司真正解决问题时还是用 windbg。
windbg 除了速度慢点(还能忍受,现在我公司的机器是AMD双核的),还有就是初次使用配制比较麻烦,你如果真实的使用 2 台机器调试那问题可能会更多。
我每次重装系统后,都要上网找资料然后一遍遍配制挺烦人的,这次总结一下。
首先,先下载/download/symbols/packages/windowsxp/WindowsXP-KB835935 -SP2-slp-Symbols.exe?符号表,然后安装到真实系统中。
再下载/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 "随后关闭系统。
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:图13.下一步选择”Output to named piped".如图2:图24.虚拟机配置完毕,接下来启动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:图35.在上述界面按下上下箭头键。
回到MasterOS,通过快捷方式打开WinDBG,此时WinDBG会出现如下提示:Microsoft (R) Windows Debugger V ersion 6.11.0001.404 X86Copyright (c) Microsoft Corporation. All rights reserved.Opened \\.\pipe\com_1Waiting to reconnect...回到虚拟机,按下回车,windgb会显示连接信息。
单机调试方案
单机调试方案在软件开发过程中,调试是一个至关重要的环节。
通过调试,我们可以发现和解决代码中的错误,确保软件的功能和性能得以正常运行。
单机调试是指在本地环境中进行调试,而不是在远程服务器上进行调试。
在本文中,我们将讨论一种单机调试方案,以便帮助开发人员更好地进行调试工作。
一、搭建调试环境在开始调试之前,我们首先需要搭建一个适合的调试环境。
以下是一些必备的工具和设备:1. 开发工具:选择一种适合自己的开发工具,如Visual Studio、Eclipse等。
在使用开发工具的过程中,可以利用其提供的调试功能,如断点调试、查看变量值等。
2. 调试器:调试器是一个用于发现和诊断代码错误的工具。
常见的调试器有GDB、LLDB、WinDbg等。
通过调试器,我们可以在代码中设置断点,并逐步执行代码,查看代码执行的过程和结果。
3. 物理设备:如果我们的软件需要在特定的硬件环境中运行,那么我们需要准备相应的物理设备。
例如,如果我们开发的是一个嵌入式系统的软件,那么我们需要有一个嵌入式开发板作为调试目标。
二、调试方法和技巧在搭建完调试环境之后,我们可以开始进行调试工作了。
以下是一些调试方法和技巧,帮助开发人员更有效地进行调试:1. 断点调试:在代码中设置断点,并逐步执行代码,查看代码执行过程中的变量值和状态。
当程序执行到断点处时,代码会停下来,我们可以逐行查看代码的执行情况,从而定位和解决问题。
2. 日志调试:在关键的代码位置插入日志语句,记录代码的执行情况和变量值。
通过查看日志文件,我们可以了解代码的运行轨迹,并分析出问题所在。
3. 条件断点:除了普通的断点之外,我们还可以设置条件断点。
条件断点是在断点处添加一个条件表达式,只有满足该条件时才会触发断点。
通过条件断点,我们可以更加精确地定位和解决问题。
4. 远程调试:有些调试场景需要和远程服务器进行交互。
为了方便调试,我们可以通过远程调试的方式进行调试。
远程调试能够让我们在本地开发环境中调试远程服务器上的代码,大大提高了调试效率。
windbg+vmware+win7 内核
一. vmware 下安装:windows 7 ultimate x86 中文版 1、vmware (请使用尽可能新的版本以对 tools 的支持) 的设置 打开相应 vmware 虚拟机上的 “Virtaul Machine Settings”---> “Hardware”选项中 ----> 点击 “Add” 添加一个串口设备 Seiall Port ----> “Next” ----> 在 Serial Port 里选中“Output to named pipe” ----> “next” ----> “Finish” 最后,回到 “Virtual Machine Settings”页面时,在“I/O Mode” 里选中“Yield CPU on poll” 这样 vmware 的设置就好了。
注意看清楚:Serial Port 1 还是 Serial Port 2,接下来会用到。
2、windbg 的使用 创建 windbg.exe 所在目录的环境变量后,在桌面写个批处理,保存为 vmware_win7.bat 内 容如下: 在桌面上建一个便捷方式,命令行是: windbg -b -k com:port=//./pipe/com_1,baud=115200,pipe 这样在开启 vmware 中的 windows 7 后运行这个便捷方式, windbg 与 guest OS “win7” 就建立成联线方式。
二、guest OS - win7 中设定1、在 bootmgr 中下断点 在 vista 及后续的 windows 已经取消了 ntldr 模块管理引导, 转而以 bootmgr 模块管 理引导系统。
在我的 windows 7 中要设定在哪个部分进行调试。
windws 7 可调试部分有 4 个:bootmgr 模块、winload 模块、WinResume 模块以及 windows 内核模块 Nt 模块 可以在上述的 4 个模块下断点进行调式 (1) 以管理员身份运行“命令提示符” (2) 在“命令提示符”窗口中,输入以下命令: bcdedit /set {bootmgr} bootdebug on bcdedit /set {bootmgr} debugtype serial bcdedit /set {bootmgr} debugport 1 bcdedit /set {bootmgr} baudrate 115200 注意一个细节,bcdedit /set {bootmgr} debugport 1 这一行最后的 1 对应 Serial Port 1, 所以如果是 Serial Port 2 则设置为 bcdedit /set {bootmgr} debugport 2 否则连不上。
WinDebug+虚拟机---调试驱动的配置
WinDebug+虚拟机---调试驱动的配置WinDebug+虚拟机---调试驱动的配置现在一直在做有关Windows驱动开发的工作,驱动开发非常重要的一环是驱动的调试。
对于Windebug结合虚拟机的双机驱动调试,其配置还是小有点麻烦的。
虽然原先自己配置的时候,都成功了,而且也进行了很多的开发和调试。
但某一天再来设置这些东西的时候,却发现出了问题,甚至去网上找的一些资料也没有用。
现在把自己调试驱动时的切身体会写下来,一方面自己以后也可以看看,也给广大初入门的朋友做以参考。
一、调试环境的安装(1)安装虚拟机(VM)及Windows XP系统(2)安装WinDebug二、配置调试环境(1)在WinDebug的快捷方式上添加:-k com:port=\\.\pipe\com_1,baud=115200,pipe。
例如我的主机上Windebug快捷方式设置以后如下:"C:\Program Files\Debugging Toolsfor Windows (x86)\windbg.exe" -k com:port=\\.\pipe\com_1,baud=115200,pipe (2)在虚拟机中,添加一个串行端口点击"Edit virtual machine settings",添加一个Serial Port,选择"Output to named pipe",然后下一步第一框里保持默认的""第二框里选"This end is the server."第三框里选"The other end is an application."选中"Connect at power on"然后点击"Finish然后在新窗口中选中"Yield CPU on poll"。
windbg使用方法
windbg使用方法Windbg是一款由微软公司开发的调试工具,它可以帮助开发人员分析和诊断Windows操作系统和应用程序的问题。
本文将介绍Windbg的基本使用方法,希望能够帮助读者更好地利用这个工具进行调试和分析。
首先,我们需要了解如何安装Windbg。
通常情况下,Windbg是作为Windows驱动程序开发工具包(Windows Driver Kit)的一部分发布的,也可以在微软的官方网站上下载到独立安装包。
安装完成后,我们可以在开始菜单或者安装目录中找到Windbg的可执行文件。
接下来,我们需要了解如何打开并配置Windbg。
在打开Windbg 后,我们可以通过“文件”菜单中的“符号文件路径”选项来设置符号文件的路径,以便Windbg能够正确地加载符号文件。
符号文件对于调试非常重要,它包含了源代码和可执行文件之间的映射关系,能够帮助我们更好地理解程序的运行状态。
在Windbg中,我们可以通过“文件”菜单中的“打开转储文件”选项来打开需要分析的转储文件(dump file)。
转储文件是程序崩溃时生成的一种内存快照,包含了程序崩溃时的内存状态和调用栈信息。
通过分析转储文件,我们可以找出程序崩溃的原因,并进行相应的调试和修复。
除了分析转储文件外,我们还可以通过“调试”菜单中的“附加到进程”选项来附加到正在运行的进程,以实时地监视和分析程序的运行状态。
这对于调试一些无法通过转储文件分析的问题非常有帮助,比如内存泄漏、死锁等问题。
在Windbg中,我们可以使用各种命令来进行调试和分析。
比如,通过“!analyze”命令可以自动分析转储文件,并给出可能的崩溃原因;通过“kb”命令可以查看当前线程的调用栈信息;通过“!heap”命令可以查看进程的堆内存分配情况等等。
熟练掌握这些命令对于高效地进行调试和分析非常重要。
除了命令之外,Windbg还提供了丰富的调试工具,比如内存窗口、寄存器窗口、线程窗口等,这些工具可以帮助我们更直观地了解程序的运行状态。
windbg 驱动调试
本文主要记录个人安装VMware+Windgb+Win7内核驱动调试的笔记。
一、安装环境1主机:Windows Vista Bussiness2虚拟机:VMware 73GUestOS: Win74Windbg: 6.11二、虚拟机配置打开相应vmware 虚拟机上的“Virtaul Machine Settings“2.“Hardware”选项中—-> 点击“Add”添加一个串口设备SeriallPort .3.”Next”,在“Serial Port”里选中“Output to named pipe”4.”next”,然后如下设置:5.确定之后,回到如下界面,在右脚”Virtual Machine Settings”页面时,在“I/O Mode”里选中“Yield CPU on poll“6. Ok之后就设定完毕了。
三、Windbg设置下载地址:Windbg安装之后,设置一个桌面快捷方式,然后,右键->属性,在Target中的引号后面添加如下:-b -k com:pipe,port=\\.\pipe\com_1,resets=0或者是:-b -k com:port=\\.\pipe\com_1,baud=115200,pipe 【二者似乎皆可】四、GuestOS设置Vista和XP不同, 没有boot.ini文件, 需要用bcdedit进行启动设置。
1. 在administrator权限下, 进入command line模式, 键入bcdedit命令, 会出现以下界面:2. 然后, 设置端口COM1, baudrate为115200 (除COM1外, 也可以用1394或USB. 1394用起来比COM口快多了, 当然前提是你需要有1394卡及其驱动. 很恶心的是Vista不再支持1394的文件传输协议, 但是用windbg双机调试还是可以的)命令为:bcdedit /dbgsettings {serial [baudrate:value][debugport:value] | 1394 [channel:value] | usb }3.接着, 我们需要复制一个开机选项, 以进入OS的debug模式命令为:bcdedit /copy {current} /d DebugEntyDebugPoint 为选项名称, 名字可以自己定义. 然后复制得到的ID号.4. 接着增加一个新的选项到引导菜单bcdedit /displayorder {current} {ID}这里的{ID}的ID值是刚生成的ID值.5. 激活DEBUG : bcdedit /debug {ID} ON这里的{ID} 的ID值还是刚才的ID值.6. 命令执行成功后, 重新启动机器.或者更简单的图形界面设置:在msconfig界面中,选Boot,再选Advanced options,在选择Debug、Debug port、Baud rate都打上钩。
windbg 内核调试原理(一)
windbg 内核调试原理(一)windbg 内核调试什么是 windbg 内核调试?•windbg 是一款强大的调试工具,可以用来调试 Windows 操作系统及其应用程序。
•内核调试是 windbg 的一个功能,用于调试操作系统内核,可以帮助开发人员定位和解决系统崩溃、死锁、性能问题等。
内核调试原理1.内核调试利用 Windows 的调试接口和调试驱动程序实现。
2.它通过在目标系统中安装一个调试驱动程序,与 windbg 配合使用,来进行调试。
3.此外,还需要使用串行线缆或网络连接将目标系统和调试主机连接起来。
准备工作•在进行内核调试之前,需要安装 windbg 和调试符号文件。
•调试符号文件包含了操作系统的调试信息,是进行调试的必要文件。
配置目标系统1.在目标系统中配置调试选项:•打开“控制面板”,找到“系统和安全”。
•点击“系统”,然后选择“高级系统设置”。
•在“高级” 选项卡下,点击“设置” 按钮。
•在“启动和故障恢复” 对话框中,点击“设置”。
•将“调试信息” 设置为“完全内存转储”。
2.进行启动选项配置:•打开“命令提示符”,输入以下命令:bcdedit /debug onbcdedit /dbgsettings serial debugport:1 baudrate:115200•这样将启用调试,并配置串行端口为 COM1,波特率为 115200。
配置调试主机1.在调试主机上打开 windbg:•首先,确保已经安装了 windbg。
•然后,在开始菜单中找到 windbg,并打开它。
2.配置串口调试选项:•点击“文件” -> “选项” -> “调试选项”。
•在“调试选项” 对话框中,选择“串行” 选项卡。
•选择正确的串行端口和波特率(与目标系统配置一致)。
连接目标系统和调试主机•使用串行线缆或网络连接将目标系统和调试主机连接起来。
开始内核调试•在 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,vm9双机调试无法连接解决方案
竭诚为您提供优质文档/双击可除windbg,vm9双机调试无法连接解决方案篇一:4.双机调试的设置1)配置windbg的环境,在path变量里,在变量值后面增加:;+windgb的安装目录2)在环境变量里新建一个变量名称为_nt_symbol_path,变量值为sRV*e:\symbol*/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/Rctxikug.xp[at]gmail[dot]com我常去的网站: /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,这对串口是联通的。
借助VMware实现单机使用WinDbg
调试器中,SoftICE可以说是鼎鼎大名。
而 Microsoft 的调试器 WinDbg 则有很多 SoftICE 不具备的非常有用的功能。
对于从事 Windows 系统研究和驱动开发的人来说,WinDbg 实在是件上好的兵器,值得推荐。
不过要想使用它并不是件容易的事,它需要有两台计算机,一台调试,一台被调试。
这个条件对于大多数人来说是非常苛刻的。
今天我们介绍借助VMware实现单机使用WinDbg进行调试的方法。
VMware Support 中说,自 4.0.18.0 版本之后的 WinDbg 都支持了通过 pipe 来进行调试,不过微软对此并没有任何说明。
所以,在VMware中虚拟被调试的系统,然后通过VMware 虚拟一个com端口。
使用这个虚拟的端口,就可以用 WinDbg 进行调试了。
具体步骤如下:1 设置 VMware 的虚拟com1.1 运行 VMware ,点击 "Edit virtual machine settings"1.2 点击 "Add..." 来运行 VMware 的 Hardware Wizard1.3 选择 "Serial Port",点 "下一步"1.4 选择 "Output to named pipe",点 "下一步"1.5 第一框里保持默认的 "\\.\pipe\com_1"第二框里选"This end is the server."第三框里选"The other end is an application." 选中 "Connect at power on"然后点击 "Advanced>>"1.6 选中 "Yield CPU on poll"(VMware Support 中提到了这一点),然后点完成。
使用WinDbg内核调试
使用WinDbg内核调试看雪学院,笨笨雄译安装程序基础挑选技术取得更多信息WINDOWS调试工具很强大,但是学习使用它们并不容易。
特别对于驱动开发者使用的WinDbg和KD 这两个内核调试器(CDB和NTSD是用户态调试器)。
本教程的目标是给予一个已经有其他调试工具使用经验的开发者足够信息,使其能通过参考WINDOWS调试工具的帮助文件进行内核调试。
本文将假定开发者熟悉一般WINDOWS操作系统和进程的建立过程。
本文的重点是集成内核模式和用户态模式的图形化调试器WinDbg。
KD在脚本和自动化调试中更有用,并且在资深程序员中拥有一定地位,但是本教程将集中讨论WinDbg,只会偶尔提到KD。
本文讨论的是Windows NT 4.0,Windows 2000或以后的版本,而且目标电脑的处理器基于X86架构。
对于64位平台,将不会特别提及。
总之,本教程由简单介绍调试器的安装开始,大体分成2部分,基础知识和选择技术。
基础知识包括基本调试命令和常用调试命令。
选择技术是其他命令和在很多情况下都有用的调查方法。
后者并不是调查象deadlocks, memory corruption或者resource leaks的唯一方法。
第一次阅读本教程,你可能会跳过选择技术。
你可以停止阅读本教程而转向微软调试器讨论组,也可以通过调试器的反馈e-mai解决更多的问题。
安装程序取得最新版!取得最新版的调试器,并且有规律的更新它。
这里并没有夸大最新版的价值,因为调试器会经常改进和修复错误。
你将能在下面网址下载:/whdc/devtools/debugging/default.mspx.主机与目标之间的连接调试器有使用null-modem cable 或者1394 cable连接两台电脑的安装方案。
本教程不分析单操作系统的本地调试(即在调试器运行的电脑上进行分析)。
3台电脑(目标电脑,调试服务器,调试客户端)的调试将会被简要的讨论。
如何利用wmware实现双机调试以及windbg的配置
利用wmware实现双机调试以及windbg的配置Windbg是windows内核模块开发调试工具,当调试内核时,要求双机调试。
我称正在运行要被调试的内核程序的机器为被调试机,另一台为调试机。
Windgb 要装在调试机上。
下面要介绍的是,用WMware虚拟一个XP系统作为被调试机。
要下载的软件:windbg,WMware;1.软件的安装在机器上安装这两个软件,安装过程略。
在wmware中安一个windows系统。
2.设置调试执行虚拟机中装好windows系统之后,必须把系统设置成调试执行。
2.1windows xp以下版本调试执行的设置在系统盘中找到boot.ini。
在[operating systems]后面加一行multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP " /noexecute=optin /fastdetect/debug/debugport=com2 /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 " /noexecute=optin /fastdetect/debug/debugport=com2 /baudrate=115200multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP " /noexecute=optin/fastdetect重启之后会出现如图2.1的选择界面。
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+虚拟机内核调试过程
使用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 -hedit boot.ini然后将其最末一行复制,并加入调试选项,成为为如下状态:6,在虚拟PC中选择重新启动Windows 2000,当出现启动菜单时,按方向键使其停止自动计时,等待在这里。
7,在主机(debugger)上准备启动WinDbg,考虑每次输入命令行参数太麻烦,所以建议建立一个如下内容的批处理文件,并将其放到与WinDbg.exe同位置的目录中。
Windows调试工具入门4(WinDbg内核调试配置)
WinDbg内核调试配置内核调试主要用来调试驱动代码、分析内核结构等。
WinDbg通过两台电脑可以实现内核调试,其中一台电脑运行WinDbg,被称为主机;另外一台电脑运行被调试的程序或系统,被称为目标机。
一般情况下两台电脑都是真实机器,这样调试最符合实际情况,两台电脑通过串口线、1394线或USB对联线连接起来实现双机内核调试。
如果没有两台电脑,也可以用虚拟机来模拟目标机,主机上运行WinDbg,虚拟机中安装Windows运行被调试的程序,虚拟机通过模拟的串口输出为主机上的一个命名管道,从而和主机上的WinDbg连接起来实现双机内核调试。
除双机内核调试外,WindowsXP后还引入了一种本机内核调试方式,只需要一台电脑,直接运行WinDbg就能查看修改系统内核结构等,不过所有和中断目标机系统相关的命令都不能执行,如断点命令。
如果采用虚拟机模拟目标机,调试响应速度有时候是个问题,比1394线连接的真实双机调试速度要慢不少,特别是执行操作大量内存的命令时(如搜索内存命令),感觉非常明星。
所以针对这种情况还会介绍一个特殊的辅助调试工具vmkd,该工具可以大大加速内核调试的速度,为咱们带来不少方便。
下面分节详细介绍各种内核调试情景下的配置,尽量每个步骤都截图说明。
真实机双机内核调试真实机之间的内核调试首先需要准备连接线,可以用串口线、1394线或者USB对联线。
串口线速度太慢,而且电脑城一般买不到可以直接使用的串口线,需要把线和接头买回来自己焊,按照WinDbg 帮助中的说明交叉焊接,就能得到一根可用来调试的串口线。
用串口线把两台电脑连接上后,先用Windows自带的超级终端工具,选择好串口和波特率连接。
如果在超级终端中按键能在另外一台电脑的超级终端上显示按键,则表示串口线连接成功。
接下来就可以用WinDbg连接串口调试。
某些笔记本上可能没有串口,可以买一个USB转串口的接头,然后设置USB转换后的串口号,就能把这台笔记本当作主机使用。
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键重复上⼀条命令。
WinDbg远程调试配置方法
WinDbg远程调试配置方法1. 调试环境:目标机:VMware 5.5.1 + Windows XP SP2主机:Windows XP SP2 + WinDbg 6.52. 目标机配置(虚拟机)2.1 通过VMware虚拟一个com端口关闭目标机系统,运行 VMware ,点击Edit virtual machine settings -> Add -> 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",然后点完成。
2.2 设置目标机操作系统的boot.ini在目标机操作系统的boot.ini文件加入一行multi(0)disk(0)rdisk(0)partition(1) \WINNT="Microsoft Windows XP Professional - debug" /fastdetect /debug /debugport=com1 /baudrate=115200。
目标机配置完成。
3. 主机配置安装WinDbg并在桌面创建一快捷方式,点右键属性,在快捷方式目标处填写为:(此处WinDbg装在C盘)C:\Program Files\Debugging Tools for Windows\windbg.exe -k com:port=\\.\pipe\com_1, baud=11520, pipe4. 调试顺序(1) 启动目标机,进入调试程序模式(2) 运行主机中桌面的WinDbg快捷方式,就可以连接上目标机5. 附注:5.1 如何单步调试调试驱动程序时,在目标机把驱动安装完成后,需在主机的WinDbg配置Symbol、Source 以及Image的路径,配置完成后,就可以进行驱动程序的源码单步调试。
Windbg+VM双机调试用户态进程准备工作
Windbg+VM双机调试用户态进程准备工作Alpes600一、在调试主机上安装windbg。
二、确定VM和本机网络连通。
三、符号文件配置设置环境变量:右键我的电脑->属性->高级->环境变量,在系统变量栏找到并双击名为Path的变量,在弹出的对话框的变量值一栏最后加一个分号,在加上windbg的安装目录路径。
在系统变量栏点击新建按钮,变量名为_NT_SYMBOL_PA TH,值为SRV*c:\mysymbol* /download/symbols,其中c:\mysymbol是符号文件存放的位置,可以修改。
四、添加双机调试快捷方式添加一个windbg的快捷方式,右键属性,在目标的结尾处添加-b -kcom:pipe,port=\\.\pipe\com_1,resets=0。
五、更改被调试主机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加粗内容为新增加的内容。
六、设置VM关闭虚拟机系统,在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,vm9双机调试无法连接解决方案[工作范文]
windbg,vm9双机调试无法连接解决方案
篇一:4.双机调试的设置
1) 配置WinDbg的环境,在path变量里,在变量值后面增加: ;+Windgb的安装目录
2) 在环境变量里新建一个变量名称为_NT_SYMBOL_PATH,变量值为SRV*e:\symbol*symbols,其中e:\symbol为你的symbol的安装时方的目录
3) 右键新建快捷方式,地址为:"C:\Program Files\Debugging Tools for Windows \" -b -k :port=//./pipe/_1,baud=115200,pipe 注意第二个"后面要有一个空格""里内容为的路径
4) 点击下一步,完成了WinDbg的全部配置
5) 编辑虚拟机设置
6) 点击添加,选择串行端口,点击下一步
7) 选择输出到命名管道,点下一步
8) 下一步设置如下,这里要注意要设置成//./pipe/_1,如果设置
成了\\.\pipe\_1那你就悲剧了,搞半天你会发现不知道哪里出问题了
9) 点击完成,再点击确定完成串行端口的添加
10) 启动VM的操作系统,打开C盘,设置文件下选项,设
置为不隐藏系
篇二:使用WinDBG进行双机内核调试
使用WinDBG进行双机内核调试
By
版本:。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实现Windbg与VMware的单机调试
此文档中涉及到的软件版本:
Windbg:6.12.0002.633 X86
VMware:8.0.1
虚拟系统:XP SP3
1、安装好虚拟机系统之后,关闭系统,为虚拟机系统增加串口。
点击VM->Settings
点击Add
选择Serial Port,点击next
选择Output to named pipe,点击next
在Named pipe文本框中输入管道名,图中设为”\\.\pipe\debugger”,其它都按图中所示即可,点击Finish,完成串口设置。
2、打开boot.ini文件,修改启动项。
开始->运行->c:boot.ini,以下为boot.ini文件的内容:
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional Debug" /noexecute=optin /DEBUG /DEBUGPORT=com2 /baudrate=115200
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional [VirtualKD]" /DEBUG /DEBUGPORT=bazis /fastdetect /noexecute=optin
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect
3中不同的颜色代表不同的操作系统,其中红色部分为启动调试系统,需要添加到boot.ini文件中。
特别注意:/DEBUGPORT=com2,此处与在虚拟机中添加串口有关,如果串口显示Serial Port 1,则应设置为/DEBUGPORT=com1,下图中显示的是Serial Port 2,因此设置为/DEBUGPORT=com2,否则连接不上,切记!!!
至此虚拟机已经设置完毕。
3、设置WinDbg
方法一:设置WinDbg的快捷方式
在目标中填入如下内容:
C:\WinDDK\7600.16385.1\Debuggers\windbg.exe -b -k com:pipe,port=\\.\pipe\debugger,resets=0,
其中C:\WinDDK\7600.16385.1\Debuggers\windbg.exe为windbg.exe所在的目录位置,不同的安装路径会有不同,后面黑体部分是涉及到调试的部分,port 的设置要与在虚拟机串口中设置的一致。
参数意义:
-b:一旦主机目标机之间建立起连接,立刻中断目标机
-k:内核调试
com:设置连接目标机的通信端口(此处为命名管道)和波特率(此处为115200)reset=0:指定在主机与目标机同步时,可以发送任意数量的reset包(Specifies that an unlimited number of reset packets can be sent to the target when the host and target are synchronizing)。
方法二:开始->运行,输入C:\WinDDK\7600.16385.1\Debuggers\windbg.exe -b -k com:pipe,port=\\.\pipe\debugger,resets=0,
如下图所示:
注意内容同方法一。
方法三:点击file->kernel debugging,如下所示:
此种连接方式一直没有成功,总是处于Waiting to reconnect...状态,不知为何!!!
4、重新启动虚拟机上的系统,并选择新加入的启动配置进行启动,如下图:
5、使用3中的方法一或方法二启动WinDbg,稍等一下就可以连上了。
如下图所示:
6、如果先启动WinDbg,则出现如下错误,不知为何???
7、调试符号的设置
1)、系统调试符号的设置
根据虚拟机中的系统版本从微软的网站上下载相应的调试符号包(大约
180M~200M),安装调试符号包,默认情况下会安装到C:\ WINDOWS\Symbols,也可以自己建立一个文件夹用于存放系统调试符号,我是在C盘建立一个Symbols文件夹。
当然,不安装符号包的话也可以设置成调试时自动从网上下载。
2)、自己的调试符号的设置
建一个文件夹用于存放我们自己编译出来的驱动的符号文件单独存放,不要跟系统的混到一起。
我这里在C盘建立一个MySymbols文件夹,用于存放自己的符号文件。
给这个文件夹创建一个快捷方式,把它放到C:\Documents and Settings\你的用户名\SendTo文件夹下(注意,有时此文件处于隐藏状态),这样,以后编译完驱动以后,直接在符号文件上右击->发送到“MySymbols”就可以了。
3)、环境变量的设置
如果想在Windbg启动时自动识别符号路径的设置,需要建立一个环境变量,在“我的电脑”上右击,“属性”->“高级”->“环境变量”,新建一个名为_NT_SYMBOL_PATH的环境变量,值为:
C:\Symbols;C:\MySymbols;SRV*C:\Symbols*/downl oad/symbols
这样设置以后,系统的调试符号在C:\Symbols下,而我们自己驱动的调试符号在C:\MySymbols下,当符号文件不匹配时Windbg会自动连网从/download/symbols下载符号文件到C:\Symbols,下次再用到时就不用下载了。
设置好,保存就可以了,修改环境变量需要重新启动系统才能生效。
在调试符号基本全了以后(调试时基本不再出现Windbg再连网下载符号文件的情况),建议把环境变量中联网的部分去掉。
即环境变量值改为:C:\Symbols;C:\MySymbols,
这样就断了它连网下载的念想,否则你一旦打错个符号,它还是会很负责地上网查找、下载,结果还是找不到,浪费很多时间。
如果确实某个符号找不到需要临时上网找,那么执行下面命令就可以了
.sympath+ SRV*C:\Symbols*/download/symbols
这样就重新恢复了Windbg上网下载符号的能力
4)、在windbg中设置符号文件
打开windbg,File->symbol file path,填入符号文件路径,C:\mySymbols;C:\Symbols;SRV*C:\Symbols*/download/s ymbols,勾选复选框reload,点击OK即可下载符号文件。