WinDbg使用与高级调试技巧_第1页
WinDbg使用与高级调试技巧_第2页
WinDbg使用与高级调试技巧_第3页
WinDbg使用与高级调试技巧_第4页
WinDbg使用与高级调试技巧_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

WinDbg使用与高级调试技巧第一页,共27页。上节内容回顾调试工程配置VisualStudio下基本调试方法利用pdb和dmp文件定位问题实际应用场景分析,VS调试技巧的综合演练第二页,共27页。本节内容介绍WinDbg的基本使用方法利用WinDbg生成dump与分析dump文件利用WinDbg进行远程调试WinDbg的高级调试技巧第三页,共27页。《VC++实战调试技巧》第二讲:WinDbg的使用与高级调试技巧主讲人:阳毅超UIPowerCTO第四页,共27页。第一节:WinDbg的基本使用方法什么是WinDbg

WinDbg是windows平台下对内核,应用程序,服务程序进行调试的工具。相对VS而言更加小巧,功能却比VS丰富,支持内核模式和用户模式的调试。WinDbg的下载WinDbg包含在Windows调试开发包当中Windows下的6种调试器VisualStudiowithintegratedWindowsdebuggersMicrosoftWindowsDebugger(WinDbg)MicrosoftKernelDebugger(KD)NTKDMicrosoftConsoleDebugger(CDB)MicrosoftNTSymbolicDebugger(NTSD)第五页,共27页。第一节:WinDbg的基本使用方法Windows下的6种调试器的区别

第六页,共27页。第一节:WinDbg的基本使用方法WinDbg的调试模式内核模式(Kernel-Mode)与用户模式(User-Mode)内核模式(Kernel-Mode)为了不让程序任意存取资源,大部分的CPU架构都支持Kernelmode与Usermode两种执行模式。当CPU运行于Kernelmode时,任务可以执行特权级指令,对任何I/O设备有全部的访问权,还能够访问任何虚拟地址和控制虚拟内存硬件;这种模式对应x86的ring0层,操作系统的核心部分,包括设备驱动程序都运行在该模式。用户模式(User-Mode)当CPU运行于UserMode时,硬件防止特权指令的执行,并对内存和I/O空间的访问操作进行检查,如果运行的代码不能通过操作系统的某种门机制,就不能进入内核模式;这种模式对应于x86的ring3层,操作系统的用户接口部分以及所有的用户应用程序都运行在该级别。注:本次WinDbg使用讲解仅涉及用户模式的应用程序调试第七页,共27页。第一节:WinDbg的基本使用方法PDB文件链接器自动生成文件由两个部分构成,私有符号数据(privatesymboldata)和公共符号表(publicsymboltable)私有符号数据(PrivateSymbolData)函数全局变量局部变量用户定义的结构体,类,数据类型源文件的名称和源文件中每个二进制指令的行号公共符号表(PublicSymbolTable)静态函数全局变量(extern)第八页,共27页。第一节:WinDbg的基本使用方法建立一个简单的Windows应用程序完成编译,自动完成对pdb和exe文件的生成启动WinDbg第九页,共27页。第一节:WinDbg的基本使用方法设置程序的符号文件目录快捷键,Ctrl+S设置程序的源代码目录快捷键,Ctrl+P设置程序的二进制文件目录快捷键,Ctrl+I第十页,共27页。第一节:WinDbg的基本使用方法选择可执行启动文件通过菜单选择我们生成好的exe文件第十一页,共27页。第一节:WinDbg的基本使用方法命令浏览窗口打开exe程序后自动打开命令浏览窗口,浏览加载模块,符号文件,寄存器等等数据第十二页,共27页。第一节:WinDbg的基本使用方法启动调试,打开源代码文件按下F5键或者点击启动调试按钮,进入调试状态利用菜单打开对应的源代码,自动打开源代码窗口第十三页,共27页。第一节:WinDbg的基本使用方法设置断点通过F9键我们可以在源代码窗口中设置位置断点,设置好的断点红色进行了标示通过F5键我们继续运行,程序会自动中断到断点所在代码行在浏览器窗口中我们可以看到当前执行代码的寄存器数据第十四页,共27页。第一节:WinDbg的基本使用方法单步运行通过F10进行逐过程运行通过F11进行逐语句运行通过Shift+F11跳出当前运行的函数通过Shift+F5终止调试常用的命令行g运行!gle当前错误代码第十五页,共27页。第一节:WinDbg的基本使用方法常用的命令行dt显示当前结构体成员k显示当前堆栈lm列出当前加载模块lsa根据地址列出代码第十六页,共27页。第二节:生成dump与分析dumpDump文件的种类用户模式dump文件核心模式dump文件用户模式dump文件的种类完整用户模式dump(FullUser-ModeDumps)Minidump(Minidumps)两种文件的区别仅仅是大小而已,minidump具有更多压缩以便于传输第十七页,共27页。第二节:生成dump与分析dump创建用户模式dump文件有五种工具可以用来创建dump文件,CDB、WinDbg、Dr.Watson、UserDump、ADPlus。五种工具的区别第十八页,共27页。第二节:生成dump与分析dump默认调试器的设置注册表的位置HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/WindowsNT/CurrentVersion/AeDebug/DebuggerWinDBG:

"WinDbg的安装目录\windbg.exe"-p%ld-e%ld–g

VisualStudio:

"C:\WINDOWS\system32\vsjitdebugger.exe"-p%ld-e%ld第十九页,共27页。第二节:生成dump与分析dump生成dump文件WinDbg生成dump文件命令行.dumpOptions默认生成精简内容的MiniDumps仅包含,模块、线程、堆栈信息完整minidump文件,包含完整内存信息,句柄数据,未加载模块信息,基本内存信息,线程时间信息

.dump\ma第二十页,共27页。第二节:生成dump与分析dump利用分析工具进行分析通过!anyalyze–v命令来得到详细的dump分析数据,包括:代码断点位置异常的类型与错误代码函数堆栈调用第二十一页,共27页。第三节:利用WinDbg进行远程调试远程调试远程调试由两台计算机构成,客户端(Client)和服务器端(Server)客户端安装有需要调试的应用程序和WinDbg服务器端安装有WinDbg用于建立调试会话,远程控制客户端的WinDbg两台计算机不需要同样的windows系统版本,但需要同样版本的WinDbg远程调试的步骤在服务器端启动调试服务器客户端调试工具配置客户端建立调试会话第二十二页,共27页。第三节:利用WinDbg进行远程调试在服务器端启动调试服务器启动WinDbg,选择运行需要调试的应用程序利用tcp协议建立调试服务器.servertcp:port=Socket客户端调试器工具配置设置符号目录设置代码目录第二十三页,共27页。第三节:利用WinDbg进行远程调试客户端建立调试会话选择菜单,连接远程会话(ConnecttoRemoteSession…)tcp:server=Server,port=Socket建立成功后即可打开对应代码文件设置断点进行调试第二十四页,共27页。第四节:WinDbg高级调试技巧追踪应用程序中的句柄利用htrace工具获取应用程序中句柄的差异!htrace–enable启动句柄追踪!htace–diff得到应用程序句柄分配差异,检查是否存在句柄的泄露!htrace句柄地址可以得到分配此句柄的代码堆栈通过lsa命令可以得到对应分配的代码位置第二十五页,共27页。第四节:W

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论