Windows调试工具入门555
- 格式:wps
- 大小:3.13 MB
- 文档页数:49
vs2008编译live555分类:工作问题2011-03-21 10:02 273人阅读评论(0) 收藏举报介绍:四个基本的库分别是ageEnvironment&TaskScheduler用于事件的调度,实现异步读取事件的句柄的设置以及错误信息的输出。
另外,还有一个HashTable类定义了一个通用的hash表,其它代码要用到这个表。
这些都是抽象类,在应用程序中基于这些类实现自己的子类。
2.BasicUsageEnvironmentBasicUsageEnvironment中的类主要是对UsageEnvironment中对应类的实现。
3.groupsockgroupsock类是对网络接口的封装,用于收发数据包。
正如名字本身,Groupsock主要是面向多播数据的收发的,它也同时支持单播数据的收发。
Groupsock定义了两个构造函数Groupsock(UsageEnvironment& env, struct in_addr const& groupAddr,Port port, u_int8_t ttl);Groupsock(UsageEnvironment& env, struct in_addr const& groupAddr,struct in_addr const& sourceFilterAddr,Port port);前者是用于SIM(source-independent multicast)组,后者用于SSM(source-specific multicast)组。
groupsock库中的Helper例程提供了读写socket等函数,并且屏蔽了不同的操作系统之间的区别,这是在GroupsockHelper.cpp文件中实现的。
4.liveMedialiveMedia库中有一系列类,基类是Medium,这些类针对不同的流媒体类型和编码。
计算机程序调试:常见的调试工具和技巧计算机程序调试是解决程序中的错误或问题的过程。
在软件开发的早期阶段,调试往往是程序员们面临的一项重要任务。
本文将介绍一些常见的调试工具和技巧,帮助读者更有效地调试程序。
一、调试工具1. 编译器自带调试器:大多数编程语言的主流编译器都提供了调试器,例如GDB、LLDB等。
这些调试器通常能够提供强大的功能,如断点设置、变量跟踪、单步执行等。
程序员可以通过调试器逐行查看代码执行过程,帮助发现潜在的错误。
2. 日志调试工具:日志是开发中常用的调试方式之一。
通过在代码中插入日志输出语句,在程序执行过程中记录各个关键节点的数据和状态,从而更好地理解程序的运行流程。
开发者可以使用Log4j、Logback等日志框架来进行日志的输出和管理。
3. 单元测试工具:单元测试是一种精确度很高的调试手段。
通过编写测试用例,测试特定模块或函数的输入输出,可以有效地验证程序的正确性。
JUnit是Java中常用的单元测试工具,而Python的unittest库也是一种常用的单元测试框架。
二、调试技巧1. 断点设置:在调试器中设置断点是调试的常用技巧之一。
通过在程序代码中设置断点,程序执行到断点处时会暂停,此时可以查看各个变量的值,并逐步调试代码。
在调试过程中,可以根据需要添加、删除或禁用不同的断点,以便更好地分析问题。
2. 单步执行:调试器通常支持单步执行功能,允许程序逐行执行。
通过单步执行,可以逐步调试代码,并观察每一行代码的执行情况,对于理解程序运行过程和查找错误非常有帮助。
3. 变量跟踪:在调试过程中,经常需要查看各个变量的值,以便分析问题。
调试器通常提供了变量查看的功能,可以在程序暂停的时候查看当前变量的值,或者设置断点后在断点处查看变量的值。
通过变量跟踪,可以更清晰地了解程序的状态。
4. 日志输出:在程序中适当插入日志输出语句,输出关键数据和状态,有助于程序调试。
在调试过程中,可以根据程序执行的路径和输出的日志,分析程序的运行流程,确定问题的所在。
项目十二 555 定时器应用电路的设计与调试1. 能分析说明 555 定时器的内部结构、引脚功能;2. 能按照要求选用 555 定时器及其它元器件组成多谐振荡器、施密特触发器、单稳态触发器;并能熟练测量、调整 555 定时器应用电路参数,分析和排除常见故障。
3.爱护工具、器材、整理、清洁、习惯与素养 二、实践设备与材料 1. 工具 2. 器材3. 仪器仪表三、实践过程1.555 定时器应用电路仿真利用 Multisim 软件完成下列电路的仿真,要求如下,结果填入表 12-1 中。
(1)波形产生电路:利用 555 定时器及一些辅助元件设计电路,产生频率为 100KHz 、占空比可调的脉冲信号。
(2) 波形变换电路:利用 555 定时器设计一波形整形器或变换器完成正弦波或三角波至方波的变换。
表 12-3 脉冲信号源电路记录周期:T=(R1+2R3+2R P)C2\1.43 频率:最大占空比:t w1=T k\T 最小占空比:t w2=t\T输入波形:输出波形:周期:T= (R1+2R3+2R P)C2\1.43 频率:自我评价小组评价教师评价2.单稳态电路仿真与测试图12-3 555 定时器构成单稳态触发器如果用图12-3 所示单稳态电路输出定时时间为1 s 的正脉冲,R = 27 kΩ,试确定定时元件C 的取值,并选择合适的电容。
若定时时间改为5 s 的正脉冲,C = 30uF,试确定定时元件R 的取值。
并通过仿真进行验证。
结果记录在表12-2 中。
表12-2 单稳态电路仿真与测试电阻电容仿真波形及脉冲时间时间为1 s 的正脉冲R = 10 kΩ C=0.1μF时间为5 s 的正脉冲R =51KΩC=0.1uF自我评价小组评价教师评价3.1kHZ 的脉冲信号源电路的设计与制作理解图12-4 所示电路,使用555 电路为某TTL 电路设计一个1kHZ 的脉冲信号源。
实际电路的频率可调范围为750~1090HZ。
学会使用电脑的调试工具在当今信息化时代,电脑已经成为我们生活和工作中必不可少的工具。
然而,由于软硬件的繁杂性,我们在使用电脑过程中常常会遇到各种问题和bug。
为了解决这些问题,学会使用电脑的调试工具将成为我们提高工作效率的关键。
本文将介绍几种常用的电脑调试工具和它们的使用方法。
一、任务管理器任务管理器是Windows系统自带的一款常用调试工具,在遇到电脑卡顿或程序无响应的情况下,它可以帮助我们找到问题的症结。
使用任务管理器,我们可以查看系统资源的使用情况,关闭卡死的进程,或开启新的任务,从而恢复电脑的正常运行。
在Windows系统中,按下Ctrl+Shift+Esc快捷键可以直接打开任务管理器。
在任务管理器的“进程”选项卡中,我们可以看到当前正在运行的所有进程及其所占用的资源。
通过观察CPU、内存和磁盘使用率,我们可以找到系统中占用大量资源的进程,并对其进行优化或关闭。
二、代码编辑器调试工具对于从事软件开发的人员来说,代码编辑器的调试工具是必不可少的。
常见的代码编辑器如Visual Studio Code、PyCharm等都提供了强大的调试功能,帮助开发者查找问题和解决bug。
以Visual Studio Code为例,它内置了调试功能,可以在代码中设置断点,逐行调试程序。
当程序运行到断点处时,我们可以查看变量的值,进行单步调试,或者观察函数的调用栈,从而分析问题所在。
此外,Visual Studio Code还支持对应用程序的远程调试,方便我们在客户端出现问题时进行调试和排查故障。
三、网络调试工具在进行网络开发或者维护时,网络调试工具是不可或缺的帮手。
常见的网络调试工具有Wireshark、Postman等。
Wireshark是一款网络抓包工具,通过监听网络接口,它可以捕获和分析网络数据包,在网络故障排查和网络优化中发挥着重要作用。
我们可以在Wireshark中查看网络通信的详细信息,包括请求方法、响应状态码、请求头、响应体等,从而找到网络中的问题所在。
555使用手册【原创实用版】目录1.555 使用手册概述2.555 的安装与设置3.555 的功能与应用4.555 的维护与升级5.555 的安全与注意事项正文【555 使用手册概述】555 使用手册是为了帮助用户更好地理解和使用 555 产品而编写的。
本文将详细介绍 555 的安装与设置、功能与应用、维护与升级、安全与注意事项等方面的内容,以帮助用户充分发挥 555 产品的优势,提高工作效率。
【555 的安装与设置】在开始使用 555 之前,请确保您已经正确安装了 555 产品。
以下是安装与设置的详细步骤:1.确认产品型号和规格是否与您的设备相匹配。
2.根据产品说明书中的指导,连接 555 产品到您的设备上。
3.启动设备,按照屏幕提示进行相关设置。
【555 的功能与应用】555 产品具有强大的功能,适用于各种场景。
以下是一些主要功能及其应用示例:1.文字输入:555 可以快速、准确地识别用户的文字输入,为用户提供便捷的文字处理功能。
2.语音识别:555 支持实时语音识别,可以帮助用户进行语音转文字的记录和整理。
3.图像识别:555 具备图像识别功能,可以识别并提取图像中的文字信息。
【555 的维护与升级】为了保证 555 产品的性能和稳定性,需要定期进行维护和升级。
以下是一些建议:1.定期检查设备连接是否正常,如有问题及时处理。
2.确保设备软件更新至最新版本,以获得更好的性能和功能。
3.遇到问题时,及时联系售后服务人员进行处理。
【555 的安全与注意事项】在使用 555 产品时,请注意以下几点以确保设备安全和个人信息安全:1.确保设备存放在干燥、通风的地方,避免阳光直射和潮湿环境。
2.不要在设备上安装未经授权的软件,以防病毒和恶意程序侵入。
3.切勿将设备用于非法用途,遵守我国相关法律法规。
通过以上介绍,相信您已经对 555 产品有了更加全面的了解。
引言方波是一种非正弦曲线的波形,通常会于电子和讯号处理时出现。
理想方波只有“高”和“低”这两个值。
电流的波形为矩形的电流即为方波电流。
因为方波可以快速从一个值转至另一个(即0→1或1→0),所以方波就用作时钟讯号来准确地触发同步电路,此外方波信号在电子技术上具有较大应用,通过设计一个方波脉宽调制电路对研究方波产生的原理,加深方波基本参数的理解具有重大意义。
1设计任务及要求1.1设计任务利用电路分析基础、模拟电路、数字逻辑等专业基础课程所学知识,设计一个脉宽调制电路。
1.2设计要求电路输出矩形波;(1)输出频率范围:100Hz-5KHz;(2)脉冲宽度可调范围:1%-99%;间隔:1%;(3)输出幅度:1-5V。
1.3电路特点由于电路要求不高,功能简单,设计的电路在满足设计要求的条件下具有结构简单,性能可靠,经济实用等特点。
2电路功能介绍及设计方案论证2.1电路功能介绍根据设计任务及要求,电路主要功能为产生一个可以调节幅度、频率、占空比,输出稳定的方波信号,并且在调节方波的幅度、频率、占空比等参数时,不改变其他参数。
2.2电路工作原理获取矩形脉冲波形的途径一般有两种:一种利用各种形式的多谐振荡器电路直接产生所需要的矩形脉冲,另一种通过各种整形电路将已有的周期性变化波形变换为符合要求的矩形脉冲。
根据设计任务及要求,采用第二种途径获取幅度、频率、占空比均可调的矩形脉冲波。
电路主要由多谐振荡器、微分电路、单稳态触发器三部分组成,电路利用多谐振荡器产生频率可调的矩形脉冲,利用单稳态触发器对产生的矩形脉进行整形,调节占空比。
由于单稳态触发器要求输入脉冲宽度小于输出脉冲宽度,故在多谐振荡器和单稳态触发器之间加入微分电路,使多谐振荡器产生的脉冲宽度变窄。
2.3总体设计方案及论证2.3.1总体设计方案由前文分析电路工作原理可知,电路主要由多谐振荡器、单稳态触发器、微分电路三部分组成。
由数字逻辑课程所学知识知,有多种方法组成多谐振荡器或单稳态触发器,考虑到电路的可靠性及成本因素,设计的电路主要使用555定时器与外加元件接成多谐振荡器和单稳态触发器,通过理论计算设置外加元件的电阻值、电容值,以满足设计要求,调节外接于555定时器的电阻来实现矩形脉冲的频率及占空比。
555使用手册欢迎您购买555产品。
本手册将提供详细的使用指南和技巧,帮助您充分发挥555产品的功能。
请仔细阅读下文,并按照指引操作。
1. 产品概述555是一款多功能电子设备,具备以下特点:- 高性能处理器,实现高效的运算和数据处理;- 多种连接接口,方便与其他设备进行数据交互;- 大容量储存空间,满足您的数据存储需求;- 人性化的操作界面,方便快捷的操作体验。
2. 开箱及组装在使用555之前,请确保您已完成以下步骤:a) 打开产品包装,确保配件齐全;b) 将电源适配器连接至555,并插入电源插座;c) 将显示器连接至555,确保连接稳固;d) 连接鼠标和键盘至555的USB接口;e) 打开555电源开关。
3. 初次使用当您首次启动555时,请按照以下步骤进行设置:a) 选择语言:在显示器上选择您偏好的语言;b) 配置网络:如果需要连接网络,请按照网络设置向导完成连接;c) 创建账户:根据提示,设置您的账户信息;d) 完成设置:根据引导完成系统设置。
4. 主要功能4.1 桌面界面555的桌面界面为您提供快速访问主要功能和应用程序的便捷方式。
您可以通过点击图标或使用快捷键来打开应用程序。
通过拖动和放置图标,您可以自定义您的桌面布局。
4.2 文件管理使用555的文件管理功能,您可以轻松管理您的文件和文件夹。
您可以创建、复制、移动和删除文件,还可以进行文件夹分类和搜索。
另外,您可以使用555的备份和恢复功能来保护您的数据安全。
4.3 多媒体功能555提供丰富的多媒体功能,包括音乐、视频和照片的播放。
您可以导入您喜欢的音乐和视频,并创建播放列表。
此外,您还可以使用555的相机功能来拍摄照片和录制视频。
4.4 应用商店您可以通过555的应用商店下载和安装各种应用程序,以满足您的个性化需求。
浏览并选择您感兴趣的应用,并按照提示进行安装和使用。
5. 常见问题解答以下是一些常见问题的解答,帮助您更好地使用555:Q: 555无法正常启动怎么办?A: 确保电源线连接牢固,检查电源插座是否正常工作,尝试按住电源键重启设备。
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" 命令列出模块信息等。
Debugging Tools for Windows是微软的一个蓝屏故障调试工具,可以方便地解决蓝屏问题。
一般地,电脑上已经设置过保存故障转储文件,但是,某些GHOST版的操作系统关掉了这个功能,我们必须打开它。
在“我的电脑”上按鼠标右键,属性找到“高级”选项卡,在“启动和故障恢复”处点击设置在这里设置为小内存转储(64K),节省磁盘空间当系统蓝屏以后,我们就可以在C:\WINDOWS\Minidump中发现dmp文件(蓝屏后的内存转储文件)。
启动Debugging Tools,依次点击“File”-“Open Crash Dump”选择蓝屏时产生的那个dmp文件打开之后,前面那些字符不用理会,注意最后一行1.安装debug工具下载页面地址:/whdc/devtools/debugging/installx86.mspx选择合适的版本安装2.安装Symbols(特征库)建议可以多安装以免出现分析不出来的情况下载地址:/whdc/devtools/debugging/symbolpkg.mspx 推荐使用VISTA的symbol packages,解析的更详细3.添加Symbols把Symbols的安装路径添加进去4.运行解析找到dump文件添加进去5.以下是一个例子当时的蓝屏代码是0X0000000A,操作系统是XP SP2,是一个QQ引起蓝屏的问题Loading Dump File [e:\!minidump\Mini032707-01.dmp]Mini Kernel Dump File: Only registers and stack trace are availableSymbol search path is: F:\WINDOWS\SymbolsExecutable search path is:Unable to load image ntoskrnl.exe, Win32 error 2*** WARNING: Unable to verify timestamp for ntoskrnl.exeWindows XP Kernel Version 2600 (Service Pack 2) UP Free x86 compatibleProduct: WinNt, suite: TerminalServer SingleUserTSKernel base = 0x804d8000 PsLoadedModuleList = 0x805543a0Debug session time: Tue Mar 27 08:12:47.390 2007 (GMT+8)System Uptime: 0 days 0:18:24.941Unable to load image ntoskrnl.exe, Win32 error 2*** WARNING: Unable to verify timestamp for ntoskrnl.exeLoading Kernel Symbols ............................................................................................................................. Loading User SymbolsLoading unloaded module list.............******************************************************************************** ** Bugcheck Analysis ** ********************************************************************************Use !analyze -v to get detailed debugging information.BugCheck 1000000A, {e1821a40, 2, 0, 805cf120}Unable to load image npkcusb.sys, Win32 error 2*** WARNING: Unable to verify timestamp for npkcusb.sys*** ERROR: Module load completed but symbols could not be loaded for npkcusb.sys Unable to load image hidusb.sys, Win32 error 2*** WARNING: Unable to verify timestamp for hidusb.sys*** WARNING: Unable to verify timestamp for HIDCLASS.SYSUnable to load image USBPORT.SYS, Win32 error 2*** WARNING: Unable to verify timestamp for USBPORT.SYSProbably caused by : npkcusb.sys ( npkcusb+384 )Followup: MachineOwner---------由于npkcusb.sys不是系统文件可以选择删除他来解决6.也有分析不出来的情况这个时候就需要多个minidump分析了如果出现如下的情况,则为symbols文件不足以分析这个dump文件;需要重新添加,或是寻找新的updata 文件。
Windows CMD命令的调试与错误处理技巧在Windows操作系统中,CMD命令是一种非常常用的工具,它可以用于执行各种操作,包括文件管理、系统配置等。
然而,在使用CMD命令时,我们常常会遇到一些错误和问题。
本文将介绍一些调试和错误处理的技巧,帮助读者更好地使用CMD命令。
一、调试CMD命令1. 使用echo命令输出调试信息在CMD命令中,可以使用echo命令输出一些调试信息,帮助我们了解命令的执行过程。
例如,我们可以在命令的关键位置插入echo语句,输出一些变量的值或者执行的步骤,以便进行调试。
这样可以帮助我们定位问题并找到错误的原因。
2. 使用pause命令暂停命令执行有时候,我们需要暂停CMD命令的执行,以便观察中间结果或者进行手动操作。
在CMD命令中,可以使用pause命令来实现这个功能。
当命令执行到pause 命令时,会暂停执行,并等待用户按下任意键继续执行。
这样可以帮助我们更好地调试和观察命令的执行过程。
3. 使用rem命令注释代码在CMD命令中,可以使用rem命令来注释代码。
注释的代码不会被执行,但可以帮助我们记录和说明代码的功能和用途。
通过注释代码,我们可以更好地理解和调试命令,减少错误和问题的发生。
二、错误处理技巧1. 使用IF ERRORLEVEL语句判断错误在CMD命令中,可以使用IF ERRORLEVEL语句来判断命令执行是否出现错误。
当命令执行成功时,ERRORLEVEL的值为0;当命令执行失败时,ERRORLEVEL的值为非零。
通过判断ERRORLEVEL的值,我们可以根据不同的情况采取不同的处理方式,例如输出错误信息、执行其他命令等。
2. 使用2>NUL将错误信息重定向到空设备在CMD命令中,可以使用2>NUL将错误信息重定向到空设备。
这样可以避免错误信息的输出,使命令执行过程更加清晰。
例如,我们可以使用dir命令来列出当前目录下的文件和文件夹,如果目录不存在,会出现错误信息。
Windows调试工具入门— 1分类:windows 2012-11-28 20:55460人阅读评论(0)收藏举报一、引子Debugging Tools for Windows是微软发布的一套用于软件调试的工具包(后面如果没有指明,那么我会使用WinDbg来作为这一套调试工具的简称)。
我第一次接触是在三年前的一个内核驱动项目,由于进行了IDT中键盘鼠标中断的Hook,使用Softice调试时造成会造成影响,只得使用WinDbg通过串口进行双机调试。
自此之后这个Windows平台下最为强大的调试工具一直是开发过程中的必备。
这里我毫不掩饰的说“最强”,可能很多通过逆向工作而接触调试的朋友不会认同,但是我相信随着对WinDbg了解的加深,以及对这套工具在软件开发中应用的了解,他们也会和我有一样的观点。
一直以来,软件调试技术在软件开发者中都没有得到足够的普及和重视,互联网上能找到的系统描述的资料也较少。
随着国内软件行业整体的发展和进步,这些技术慢慢开始得到推广。
2008年出版的有关调试的数据比以往都要多。
我有幸拜读了Raymond的《软件调试》,以及熊力的《Windows用户态程序高效排错》,获益良多。
这几年的工作中也积累了一些关于Windows调试工具的知识,希望能够将这些东西进行一些分享。
因此,利用几个月空闲时间翻译了 WinDbg 文档中上半部调试器配置、使用和命令介绍的内容,同时准备写一些关于WinDbg 调试工具的初级文章。
希望能够为对调试技术感兴趣而又苦于没有资料的朋友提供一些帮助。
特别感谢我的前同事小喂。
虽然他第一条串口线还是我焊的,但是他对于WinDbg的使用和了解程度很快就超过了我。
在相当长时间的共事和讨论中,让我学到了很多。
二、 Windows调试工具的简介和组成WinDbg是专门为Windows NT系列操作系统设计的调试器,最早是作为Windows NT 3.1的工具发布的。
其后也一直跟随NT操作系统的发展而不断发展完善。
如果用一句话来概括,可以说WinDbg是为了软件开发而存在的调试工具。
软件包中的调试器和小工具的各种功能都是为了配合软件的开发而设计的,并且覆盖到了Windows平台下各种不同类型项目的调试(传统的SDK或MFC应用程序、.NET平台应用、COM应用、软硬件驱动程序等等)。
Windows调试工具包中的调试器包括WinDbg、KD、CDB和NTSD。
其中, KD 用于内核调试;CDB和NTSD用于用户态调试,在功能和使用上几乎完全一致;WinDbg是内核调试器和用户态调试器的综合体,由于功能完善并且具有图形界面,所以是最常用的工具。
它们能够在x86、 Itanium和x64机器上的所有NT 平台操作系统中运行。
另外,工具包中还有一些小工具,下面是常用的几个:KDbgCtrl:用于控制和配置内核调试的一些参数。
例如是否只有当发生异常时才会启用内核调试、设置DbgPrint缓冲区大小、如何处理用户模式异常等等。
ADPlus:这是一个VB脚本,可以为一个或多个进程自动创建内存dump。
SymStore:用于创建符号存储。
当需要创建自己的符号存储时就要用到它了。
SymProxy:用于在网络中创建单独的HTTP符号服务器,以供所有调试器使用。
该工具特别适合企业级应用的环境,可以将多个符号存储通过单一的接入点提供使用。
DbgSrv、KdSrv、Remote.exe:用于远程调试。
GFlags:用于编辑Global Flags。
UMDH:用于对用户模式堆分配的情况进行转储和分析。
USBView:这是WinDbg 6.10.3版本才加入到软件包中的工具,可以查看当前连接到系统中的USB设备信息。
另外,Application Verifier虽然没有包含在软件包中,但是也是一个非常强大的工具。
可以对程序运行时的很多状态进行监控,以发现一些普通调试难以找到的错误。
下面是Application Verifier配置界面的一个截图:Application Verifier可以在这个页面下载:/fwlink/?linkid=108353三、 Windows调试器和其他熟知的调试器比较可能很多已经习惯使用SoftICE、OllyDbg、IDE调试器的朋友会提出这样的疑问:在这么多调试器中,为什么要选择WinDbg?它究竟有什么特点?设想一下下面几个场景:公司的软件针对企业级用户,该客户在地球另一半的美国。
有一天客户抱怨了一个BUG,但是从抓取的dump又没办法看出个所以然,想进行动态调试查找原因。
公司预算有限,不能让你过去出差顺便旅游、对方公司有防火墙,不允许外部连接,等等等等。
怎么办?项目规模很大,涉及到的模块多,版本也多,并且是由不同部门开发的。
这些部门可能遍布五湖四海。
如何在调试其中某个模块时,能够快速获得它的符号和源文件,而不用每次都从一大堆不同版本的文件中辛苦找寻?调试到某个阶段,突然发现这不是自己的模块出现问题,如何快速知道这个问题应该找谁解决?项目某些重要模块有保密需要,如何控制调试人员访问符号和源文件的权限?驱动程序怎么才能源码调试?SoftICE不支持新系统,我要在Vista上调试怎么办?软件中包含一个Windows服务组件,但是每次还没有登陆到桌面之前就崩溃了,怎么进行动态调试?我想调试Explorer,调试IE,调试CSRSS,调试……,但是调试器一附加上去,系统就会出问题。
怎么办?公司发布的软件,有用户反馈和XXX安全软件冲突老是造成系统崩溃,但是搭建环境之后却又没有办法重现;对方是个普通用户,鼠标都抓得不太稳。
用户很火大,闹着要抓个老虎到公司来找你上司做俯卧撑,后果很严重,怎么办?在现实环境中,有很多复杂的调试场景,我们需要专业级的调试器来解决这些问题。
而WinDbg恰恰提供了这种商业软件环境下的专业级软件调试功能,它和其他很多我们熟知的调试器的区别也在于此。
我们将WinDbg和其他调试器分作内核调试器和用户态调试器两类来进行比较。
内核调试方面:WinDbg SoftICE原理 Windows操作系统内置调试支持 Hook中断,接管系统系统和平台支持 x86、Itanium和x64机器上的所有NT平台操作系统 x86,由于已停止更新,新版本操作系统中支持不佳,老系统中也常常遇到兼容性问题符号和源码支持完美支持符号调试和源码调试,可直接使用微软公共符号支持符号调试和源码调试,但是需要先转换符号格式远程调试通过和远程工具、转发器的配合,实现各种灵活的远程调试方式,以支持不同的网络环境通过Virtual SoftICE支持基于网络的远程调试硬件需求通过串口、1394、USB 2.0接口的双机调试;通过Pipe连接的虚拟机调试;或者功能有诸多限制的本地内核调试单机或者通过Virtual SoftICE 的双机调试用户界面由于是双机调试,调试器只是主控机上运行的一个普通软件。
拥有GUI界面,可以同时进行其他应用。
单机调试时完全接管系统,字符界面,操作不是很方便。
扩展性支持脚本和插件,并且软件包本身提供了大量非常有用的插件支持插件由于SoftICE已经停止更新,WinDbg可以说是现在Windows平台上唯一好用的进行内核调试的工具,并且随着新版本的不断推出,不断地添加对新版操作系统的支持以及完善功能。
强大的符号支持,方便的源码调试,使得内核级调试能够事半功倍。
用户态调试方面:Windows调试工具包 OllyDbg Visual Studio调试器原理 Windows的用户程序调试支持 Windows的用户程序调试支持 Windows 的用户程序调试支持系统和平台支持主要基于NT系统,9x内核下支持不佳并且需要安装附加模块主要支持NT系统,9x下也可以使用新版本的VisualStudio不支持在9x系统下安装。
VC6之前可以在9x下调试符号和源码支持完美支持符号调试和源码调试,可直接使用微软公共符号支持符号调试和源码调试支持。
VS2008开始可以直接使用微软公共符号远程调试通过和远程工具、转发器的配合,实现各种灵活的远程调试方式,以支持不同的网络环境不支持较新版本Visual Studio中支持无源码调试反汇编分析能力较弱,GUI界面偏弱,无源码时调试比较困难强大的代码分析能力,无符号和源码时也能很好的进行调试无源码调试的支持很弱,使用不便用户界面 GUI界面不是很丰富,大量操作需要通过命令 GUI界面强大,能够实现大多数调试操作介于WinDbg和OllyDbg之间。
扩展性支持脚本和插件,并且软件包本身提供了大量非常有用的插件支持脚本和插件,有大量可用的资源支持插件扩展Dump文件调试支持,分析功能强大不支持支持,但是不够强大.NET调试通过SOS.dll支持,进行高级调试比较方便不能直接支持功能强大易用,绝大多数情况下都能解决问题由于WinDbg功能相当复杂,有很多方面并不能一一比较,例如非侵入式调试、通过WinDbg控制CDB和NTSD来调试系统服务、创建和分析Dump文件等等。
总体来说,WinDbg更适合作为软件项目开发和维护过程中的调试工具使用,而OllyDbg更适合逆向工程。
四、何时使用Windows调试工具根据我个人对WinDbg的使用经验来说,它更适合作为开发维护的辅助工具来使用。
如果要进行用户态的逆向工程,推荐使用OllyDbg、IDA这些拥有强大汇编程序分析能力的工具。
WinDbg更适用于以下这些场合:商业软件的Debug和客户支持内核驱动的调试,以及对驱动进行逆向工程时进行动态调试研究Windows本身的内核或者软件疑难BUG的调试,如死锁、COM调用、资源泄露、堆栈或者堆溢出以性能优化为目的的调试对调试目标基本不造成影响的非侵入式调试、符号、源码和可执行映像路径设置四使用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文件,而不需要设置路径)。