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

下载本文档

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

文档简介

1、VC+ 实战调试技巧 前言:上节内容回顾与本节内容介绍 主讲人:阳毅超 UIPower CTO 上节内容回顾 调试工程配置 VisualStudio下基本调试方法 利用pdb和dmp文件定位问题 实际应用场景分析,VS调试技巧的综合演练 本节内容介绍 WinDbg的基本使用方法 利用WinDbg生成dump与分析dump文件 利用WinDbg进行远程调试 WinDbg的高级调试技巧 VC+ 实战调试技巧 第二讲:WinDbg的使用与高级调试技巧 主讲人:阳毅超 UIPower CTO 第一节:WinDbg的基本使用方法 什么是WinDbg WinDbg是windows平台下对内核,应用程序,服

2、务程序进行调试的工具。相对VS而言更加小巧,功能 却比VS丰富,支持内核模式和用户模式的调试。 WinDbg的下载 WinDbg包含在Windows调试开发包当中 http:/ Windows下的6种调试器 Visual Studio with integrated Windows debuggers Microsoft Windows Debugger (WinDbg) Microsoft Kernel Debugger (KD) NTKD Microsoft Console Debugger (CDB) Microsoft NT Symbolic Debugger (NTSD) 第一节:W

3、inDbg的基本使用方法 Windows下的6种调试器的区别 第一节:WinDbg的基本使用方法 WinDbg的调试模式 内核模式(Kernel-Mode)与用户模式(User-Mode) 内核模式(Kernel-Mode) 为了不让程序任意存取资源,大部分的CPU架构都支持Kernel mode与User mode两种执行模式。 当CPU运行于Kernel mode时,任务可以执行特权级指令,对任何I/O设备有全部的访问权,还能 够访问任何虚拟地址和控制虚拟内存硬件;这种模式对应x86的ring0层,操作系统的核心部分,包 括设备驱动程序都运行在该模式。 用户模式(User-Mode) 当C

4、PU运行于User Mode时,硬件防止特权指令的执行,并对内存和I/O空间的访问操作进行检查, 如果运行的代码不能通过操作系统的某种门机制,就不能进入内核模式;这种模式对应于x86的 ring3层,操作系统的用户接口部分以及所有的用户应用程序都运行在该级别。 注:本次WinDbg使用讲解仅涉及用户模式的应用程序调试 第一节:WinDbg的基本使用方法 PDB文件 链接器自动生成 文件由两个部分构成,私有符号数据(private symbol data)和公共符号表(public symbol table) 私有符号数据(Private Symbol Data) 函数 全局变量 局部变量 用户

5、定义的结构体,类,数据类型 源文件的名称和源文件中每个二进制指令的行号 公共符号表(Public Symbol Table) 静态函数 全局变量(extern) 第一节:WinDbg的基本使用方法 建立一个简单的Windows应用程序 完成编译,自动完成对pdb和exe文件的生成 启动WinDbg 第一节:WinDbg的基本使用方法 设置程序的符号文件目录 快捷键,Ctrl+S 设置程序的源代码目录 快捷键,Ctrl+P 设置程序的二进制文件目录 快捷键,Ctrl+I 第一节:WinDbg的基本使用方法 选择可执行启动文件 通过菜单选择我们生成好的exe文件 第一节:WinDbg的基本使用方法

6、 命令浏览窗口 打开exe程序后自动打开命令浏览窗口,浏览加载模块,符号文件,寄存器等等数据 第一节:WinDbg的基本使用方法 启动调试,打开源代码文件 按下F5键或者点击启动调试按钮,进入调试状态 利用菜单打开对应的源代码,自动打开源代码窗口 第一节:WinDbg的基本使用方法 设置断点 通过F9键我们可以在源代码窗口中设置位置断点,设置好的断点红色进行了标示 通过F5键我们继续运行,程序会自动中断到断点所在代码行 在浏览器窗口中我们可以看到当前执行代码的寄存器数据 第一节:WinDbg的基本使用方法 单步运行 通过F10进行逐过程运行 通过F11进行逐语句运行 通过Shift+F11跳出

7、当前运行的函数 通过Shift+F5终止调试 常用的命令行 g 运行 !gle 当前错误代码 第一节:WinDbg的基本使用方法 常用的命令行 dt 显示当前结构体成员 k 显示当前堆栈 lm 列出当前加载模块 lsa 根据地址列出代码 第二节:生成dump与分析dump Dump文件的种类 用户模式dump文件 核心模式dump文件 用户模式dump文件的种类 完整用户模式dump(Full User-Mode Dumps) Mini dump(Minidumps) 两种文件的区别仅仅是大小而已,minidump具有更多压缩以便于传输 第二节:生成dump与分析dump 创建用户模式dump

8、文件 有五种工具可以用来创建dump文件,CDB、WinDbg、Dr.Watson、UserDump、ADPlus。 五种工具的区别 第二节:生成dump与分析dump 默认调试器的设置 注册表的位置HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/AeDebug/Debugger WinDBG: WinDbg的安装目录windbg.exe -p %ld -e %ld g Visual Studio: C:WINDOWSsystem32vsjitdebugger.exe -p %ld -e %ld 第二节:生成dum

9、p与分析dump 生成dump文件 WinDbg生成dump文件命令行 .dump Options Filename 默认生成精简内容的MiniDumps 仅包含,模块、线程、堆栈信息 完整minidump文件,包含完整内存信息,句柄数据,未加载模块信息,基本内存信息,线程时间信 息 .dump ma FileName 第二节:生成dump与分析dump 利用分析工具进行分析 通过!anyalyze v 命令来得到详细的dump分析数据,包括: 代码断点位置 异常的类型与错误代码 函数堆栈调用 第三节:利用WinDbg进行远程调试 远程调试 远程调试由两台计算机构成,客户端(Client)和服

10、务器端(Server) 客户端安装有需要调试的应用程序和WinDbg 服务器端安装有WinDbg用于建立调试会话,远程控制客户端的WinDbg 两台计算机不需要同样的windows系统版本,但需要同样版本的WinDbg 远程调试的步骤 在服务器端启动调试服务器 客户端调试工具配置 客户端建立调试会话 第三节:利用WinDbg进行远程调试 在服务器端启动调试服务器 启动WinDbg,选择运行需要调试的应用程序 利用tcp协议建立调试服务器 .server tcp:port=Socket 客户端调试器工具配置 设置符号目录 设置代码目录 第三节:利用WinDbg进行远程调试 客户端建立调试会话 选

11、择菜单,连接远程会话(Connect to Remote Session) tcp:server=Server,port=Socket 建立成功后即可打开对应代码文件设置断点进行调试 第四节:WinDbg高级调试技巧 追踪应用程序中的句柄 利用htrace工具获取应用程序中句柄的差异 !htrace enable 启动句柄追踪 !htace diff 得到应用程序句柄分配差异,检查是否存在句柄的泄露 !htrace 句柄地址 可以得到分配此句柄的代码堆栈 通过lsa命令可以得到对应分配的代码位置 第四节:WinDbg高级调试技巧 追踪应用程序中的潜在堆异常 安装Application Verifier Application Verifier 运行时非托管代码检查工具 用于定位难于发现潜在的程序错误 打开Heaps 打开WinDbg,选择调试的应用程序 启动调试,当遇到堆错误读取或破坏的情况会

温馨提示

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

评论

0/150

提交评论