WinDbg的使用与高级调试技巧

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

《VC++实战调试技巧》前言:上节内容回顾与本节内容介绍主讲人:阳毅超UIPowerCTO上节内容回顾调试工程配置VisualStudio下基本调试方法利用pdb和dmp文件定位问题实际应用场景分析,VS调试技巧的综合演练本节内容介绍WinDbg的基本使用方法利用WinDbg生成dump与分析dump文件利用WinDbg进行远程调试WinDbg的高级调试技巧《VC++实战调试技巧》第二讲:WinDbg的使用与高级调试技巧主讲人:阳毅超UIPowerCTO第一节:WinDbg的基本使用方法•什么是WinDbgWinDbg是windows平台下对内核,应用程序,服务程序进行调试的工具。相对VS而言更加小巧,功能却比VS丰富,支持内核模式和用户模式的调试。•WinDbg的下载•WinDbg包含在Windows调试开发包当中••Windows下的6种调试器•VisualStudiowithintegratedWindowsdebuggers•MicrosoftWindowsDebugger(WinDbg)•MicrosoftKernelDebugger(KD)•NTKD•MicrosoftConsoleDebugger(CDB)•MicrosoftNTSymbolicDebugger(NTSD)第一节:WinDbg的基本使用方法•Windows下的6种调试器的区别第一节: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使用讲解仅涉及用户模式的应用程序调试第一节:WinDbg的基本使用方法•PDB文件•链接器自动生成•文件由两个部分构成,私有符号数据(privatesymboldata)和公共符号表(publicsymboltable)•私有符号数据(PrivateSymbolData)•函数•全局变量•局部变量•用户定义的结构体,类,数据类型•源文件的名称和源文件中每个二进制指令的行号•公共符号表(PublicSymbolTable)•静态函数•全局变量(extern)第一节:WinDbg的基本使用方法•建立一个简单的Windows应用程序•完成编译,自动完成对pdb和exe文件的生成•启动WinDbg第一节:WinDbg的基本使用方法•设置程序的符号文件目录•快捷键,Ctrl+S•设置程序的源代码目录•快捷键,Ctrl+P•设置程序的二进制文件目录•快捷键,Ctrl+I第一节:WinDbg的基本使用方法•选择可执行启动文件•通过菜单选择我们生成好的exe文件第一节:WinDbg的基本使用方法•命令浏览窗口•打开exe程序后自动打开命令浏览窗口,浏览加载模块,符号文件,寄存器等等数据第一节:WinDbg的基本使用方法•启动调试,打开源代码文件•按下F5键或者点击启动调试按钮,进入调试状态•利用菜单打开对应的源代码,自动打开源代码窗口第一节:WinDbg的基本使用方法•设置断点•通过F9键我们可以在源代码窗口中设置位置断点,设置好的断点红色进行了标示•通过F5键我们继续运行,程序会自动中断到断点所在代码行•在浏览器窗口中我们可以看到当前执行代码的寄存器数据第一节:WinDbg的基本使用方法•单步运行•通过F10进行逐过程运行•通过F11进行逐语句运行•通过Shift+F11跳出当前运行的函数•通过Shift+F5终止调试•常用的命令行•g运行•!gle当前错误代码第一节:WinDbg的基本使用方法•常用的命令行•dt显示当前结构体成员•k显示当前堆栈•lm列出当前加载模块•lsa根据地址列出代码第二节:生成dump与分析dump•Dump文件的种类•用户模式dump文件•核心模式dump文件•用户模式dump文件的种类•完整用户模式dump(FullUser-ModeDumps)•Minidump(Minidumps)•两种文件的区别仅仅是大小而已,minidump具有更多压缩以便于传输第二节:生成dump与分析dump•创建用户模式dump文件•有五种工具可以用来创建dump文件,CDB、WinDbg、Dr.Watson、UserDump、ADPlus。•五种工具的区别第二节:生成dump与分析dump•默认调试器的设置•注册表的位置HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/WindowsNT/CurrentVersion/AeDebug/Debugger•WinDBG:WinDbg的安装目录\windbg.exe-p%ld-e%ld–g•VisualStudio:C:\WINDOWS\system32\vsjitdebugger.exe-p%ld-e%ld第二节:生成dump与分析dump•生成dump文件•WinDbg生成dump文件命令行•.dumpOptionsFilename•默认生成精简内容的MiniDumps•仅包含,模块、线程、堆栈信息•完整minidump文件,包含完整内存信息,句柄数据,未加载模块信息,基本内存信息,线程时间信息•.dump\maFileName第二节:生成dump与分析dump•利用分析工具进行分析通过!anyalyze–v命令来得到详细的dump分析数据,包括:•代码断点位置•异常的类型与错误代码•函数堆栈调用第三节:利用WinDbg进行远程调试•远程调试•远程调试由两台计算机构成,客户端(Client)和服务器端(Server)•客户端安装有需要调试的应用程序和WinDbg•服务器端安装有WinDbg用于建立调试会话,远程控制客户端的WinDbg•两台计算机不需要同样的windows系统版本,但需要同样版本的WinDbg•远程调试的步骤•在服务器端启动调试服务器•客户端调试工具配置•客户端建立调试会话第三节:利用WinDbg进行远程调试•在服务器端启动调试服务器•启动WinDbg,选择运行需要调试的应用程序•利用tcp协议建立调试服务器•.servertcp:port=Socket•客户端调试器工具配置•设置符号目录•设置代码目录第三节:利用WinDbg进行远程调试•客户端建立调试会话•选择菜单,连接远程会话(ConnecttoRemoteSession…)•tcp:server=Server,port=Socket•建立成功后即可打开对应代码文件设置断点进行调试第四节:WinDbg高级调试技巧•追踪应用程序中的句柄•利用htrace工具获取应用程序中句柄的差异•!htrace–enable启动句柄追踪•!htace–diff得到应用程序句柄分配差异,检查是否存在句柄的泄露•!htrace句柄地址可以得到分配此句柄的代码堆栈•通过lsa命令可以得到对应分配的代码位置第四节:WinDbg高级调试技巧•追踪应用程序中的潜在堆异常•安装ApplicationVerifier•ApplicationVerifier•运行时非托管代码检查工具•用于定位难于发现潜在的程序错误•打开Heaps•打开WinDbg,选择调试的应用程序•启动调试,当遇到堆错误读取或破坏的情况会自定断点•利用堆栈窗口查看对应异常点结束语•内容回顾第一节:WinDbg的基本使用方法第二节:利用WinDbg生成dump与分析dump第三节:利用WinDbg进行远程调试第四节:WinDbg的高级使用技巧•下期内容介绍•利用BoundCheck检查和定位内存泄露•利用GDIViewer检查和定位GDI泄露•如何确定应用程序的实际内存分配情况

1 / 27
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功