版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、VC+ 实战调试技巧前言:调试技巧的重要性与课程安排主讲人:阳毅超 UIPower CTO调试技巧的重要性提高问题定位的速度更加精确的命中断点没有代码运行环境定位问题提高处理GDI泄露,内存泄露等疑难的处理效率提高分析与定位问题的能力本视频的意义全实战性质的讲解,只涉及对我们最为关键的调试技巧覆盖到我们日常使用中不常用但非常有用的技巧针对实际我们实际不同的调试情况进行示例讲解提高分析与定位问题的能力注:使用vs2010进行代码讲解,适用于vs20032008,vc6稍有区别学习本视频需要达到目标短时间内掌握调试的关键技术掌握VisualStudio调试的高级而实用的技巧掌握WinDbg的使用技
2、巧掌握定位疑难问题,如内存泄露,GDI泄露,程序偶现崩溃的处理方法掌握解决问题思路与步骤,利用调试技巧来确定范围,定位问题本讲座的课程安排第一讲:VisualStudio下的C+调试方法描述: 介绍如何利用VisualStudio的调试属性,各类断点设置,利用pdb与dump文件来定位崩溃问题。第二讲:WinDbg调试工具的调试方法描述:介绍利用WinDbg进行调试,定位dump堆栈,获取程序运行信息的方法。第三讲:定位问题方法与途径描述:介绍各种解决各类问题的思路,介绍处理内存泄露,GDI泄露等问题的方法VC+ 实战调试技巧第一讲:Visual Studio下的C+调试方法主讲人:阳毅超 U
3、IPower CTO第一节:调试工程配置调试属性设置 工程的的调试属性中,我们可以对调试的程序目录及路径进行设置。命令:通常为运行的EXE程序,例如当我们调试DLL工程时,我们的调试程序会设置为加载此DLL的exe程序。工作目录: 通常为调试程序的运行目录,当我们的程序需要使用相对路径的外部资源时就需要使用此参数了,指定一个运行目录给它。参数: 为指定为命名运行的字符串数据第一节:调试工程配置生成后事件1)当我们调试DLL工程的时候我们的调试命令通常是exe程序,每次完成编译后我们需要手动将动态库拷贝到exe所在目录中。2)通过生成后事件我们可以自动完成拷贝动态库等操作来提高我们的调试效率。3
4、)拷贝命令示例a)命名使用的是windows的cmd命令b) Copy “a.dll”“c:demo”c) Copy “C:*.dll”“c:demo”第二节:基本调试方法启动调试启动提示,通过点击VS工具栏上的调试按钮 来对运行我们程序进入调试模式(F5)停止调试,启动调试后通过点击终止按钮来停止调试( Shift+F5)暂停调试,如果程序中没有命中断点的情况下程序会顺序的执行代码,在执行过程中我们可以通过暂停按钮来暂时停止代码的执行,程序会停止在当前的执行代码行中。点击运行后又会继续执行第二节:基本调试方法输出窗口的使用当我们启动调试程序之后我们可以使用调试窗口来获取程序的运行信息。通过菜
5、单-视图-输出,我们则可以打开输出窗口快捷键为alt+2启动调试后系统会利用输出窗口反馈程序中所有资源的加载顺序和信息。第二节:基本调试方法输出窗口的使用对于有符号DLL,在输出窗口内将会显示,“已加载”,表示挂在DLL对应的符号文件已经完成加载,并观察加载DLL路径是否正确。此外输出窗口还可以显示程序调试运行过程中的输出信息。我们可以在代码中利用如OutputDebugString这样的API将文本内容输出到输出窗口中显示以便于我们进行调试。第二节:基本调试方法断点窗口断点窗口显示程序中加载的所有断点的位置及类型。通过菜单-调试-窗口-断点或者快捷键Alt+F9,可以打开断点窗口我们可以通过
6、断点窗口的工具栏按钮完成以下的操作:1、删除所有的断点或选定断点2、禁用启用所有的断点或选中断点,禁用后此断点不会命中3、导出断点或导入断点第二节:基本调试方法断点窗口位置断点的设置默认情况下我们通过F9键产生的断点类型为位置类型,即只要代码运行到此位置,即会立即产生命中。第二节:基本调试方法断点窗口条件断点的设置条件断点的命中条件可以进行配置,如某一个变量为真,或者等于某一特定数值时进行命中。我们先产生一处断点,在编辑区左侧断点红色圆形区域点击右键,选择条件断点,选择完毕之后会弹出一个对话框,提示我们输入命中的条件。第二节:基本调试方法断点窗口命中次数断点的设置命中次数断点则可以设置当经过此
7、处固定次数后才进行命中,可供选择的命中次数条件是:总命中,等于某一次数,大于等于某一次数或者几倍于某一次数。第二节:基本调试方法断点窗口筛选器断点的设置对特定的线程、计算机、进程进行断点命中第二节:基本调试方法断点窗口命中条件断点的设置命中调试断点可以在命中此断点时输出信息到输出窗口,并且可以直接打印输出变量的数据第二节:基本调试方法断点窗口数据断点的设置运行时断点,只能启动调试并且在暂停条件下才可以进行设置当指定的内存地址数据发生变化的时候立即进行命中第二节:基本调试方法断点的调试运行一句代码,遇到函数不进入函数体内部( F10)跳出当前的函数( Shift+F11 )逐句调试运行,遇到函数
8、调用后进入函数内部继续调试。(F11)在一个堆栈中我们可以通过拖动运行指针来回退代码运行位置。第二节:基本调试方法堆栈窗口的使用通过断点我们可以将程序“冻结”在某一个运行时刻,而通过堆栈窗口我们则可以看到程序当前状态的函数调用顺序。通过VS的菜单,“调试”-“窗口”-“调用堆栈”或者通过Alt+7来打开堆栈窗口通过在窗口中双击函数名称我们可以切换到对应的调用函数位置中。灰色的代表无代码和符号不可能已经定位显示。第二节:基本调试方法自动变量窗口的使用自动变量窗口中显示当前堆栈所执行所在代码行所使用的数据内容,当我们切换到下一行代码后自动变量窗口中的内容会发生对应的变化。第二节:基本调试方法局部变
9、量窗口的使用局部变量窗口显示当前堆栈函数中所使用变量内容。第二节:基本调试方法线程窗口的使用线程窗口显示当前程序线程的运行状态,在多线程程序开发中我们可以通过这个窗口了解线程的启动和释放情况。每个线程都有自己独立的调用堆栈和变量堆栈,切换不同的线程我们会发现堆栈会发生对应的变化,在线程之前堆数据可以进行共享。黄色箭头表示的是当前代码运行指针所在的线程位置,此外我们还可以看到每个线程所执行的函数体。第二节:基本调试方法 模块窗口的使用模块窗口显示当前程序所加载的所有模块内容。我们主要通过这个窗口来查看模块是否被正常加载,加载路径是否正确,并判断所需的模块的符号文件是否已经找到。第二节:基本调试方
10、法 监视窗口与快速监视窗口的使用在监视窗口中我们可以定义我们所关注的变量,输入变量的内容我们即可获取此变量的内容。变量内容超出当前堆栈显示范围后自动失效,变为灰色。此外我们可以在变量名上点击右键,选择“添加到监视”则可以快速将变量设置到监视窗口内。第二节:基本调试方法内存窗口的使用当我们创建一块图片内存后需要查看整块内存的数据,或者查看某块具体内存地址的数据时我们就需要借助到内存窗口了。输入需要查看数据的地址即可浏览到地址上下文中的数据内容。第二节:基本调试方法VisualStudio附加到进程调试方法对已经运行的程序进行调试此外F5调试启动速度较慢,对于频繁的调试不太方便,所以我们可以让程序
11、先运行起来,通过附加进行的方式继续调试。第三节:利用PDB和dump进行调试的方法什么是pdb文件PDB文件是“程序数据库”Program Data Base的简称,包含的程序的代码信息通过这个文件我们可以查看对应断点的位置,堆栈信息等内容使用PDB使得我们无需代码也可以掌握程序的堆栈运行状态。第三节:利用PDB和dump进行调试的方法如何得到pdb文件通常当我们编译代码后会自动生成一个PDB文件。在VS的工程属性面板中选择“链接器”-“调试”,则可以设置是否对pdb进行输出,并指定pdb的输出路径。第三节:利用PDB和dump进行调试的方法什么是dump文件dump文件是附加堆栈信息的存储文
12、件的简称,文件扩展名是”.dmp”,通过dump文件我们可以得到程序运行某一时刻的堆栈数据。当我们程序意外崩溃后,通常程序会立即中断运行,此时我们生成这一时刻的dump文件就可以通过此时的堆栈进行分析,找到崩溃的代码并分析原因。第三节:利用PDB和dump进行调试的方法如何得到dump文件在vs中进入调试状态后中断,在菜单中选择“调试”-“将转储另存为”即可生成dump文件 如何加载pdb文件在VS中我们选择“菜单”-工具-选项,选项窗口中选择调试-符号设置pdb所在目录,当调试时vs会自动加载模块对应的pdb文件。第三节:利用PDB和dump进行调试的方法利用VS定位崩溃点当程序出现崩溃后程序会让我们中选择对应处理方式。我们选择取消,则会出现调试器的选择窗口。我们选择vs2010进行调试,如果我们拥有程序的代码与动态库对应的pdb文件,vs会自动断点到程序崩溃的地点。第三节:利用PDB和dump进行调试的方法利用VS定位崩溃点收集输出dmp文件设置程序pdb文件目录打开dmp文件,运行dmp通过堆栈定位问题函数通过代码定位问题函数具体代码位置第四节:实际应用场景分析应用场景描述有源代码的exe程序的调试定位鼠标滚轮消息通过windowproc定位鼠标滚轮消息通
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公民权责大探索
- 禁航区与高温作业的火灾安全预防
- 专题22 地球公转与四季-2022-2023学年七年级科学下册期中期末考点大串讲(浙教版)(解析版)
- 民法典合同编培训
- 从小开始小学生的编程启蒙之路
- 2024代理型AI:生成式人工智能(GenAI)的新前沿 -Agentic AI – the new frontier in GenAI
- 办公安全从培训到实践的员工素质提升路径
- 2025年松原客货运从业资格证考试教材
- 传统文化与小学生硬笔书法教育
- 儿童保健中的肺炎预防教育工作研究
- 电力行业电力调度培训
- 生态安全与国家安全
- 全力以赴备战期末-2024-2025学年上学期备战期末考试主题班会课件
- 2024年保密协议书(政府机关)3篇
- 《视频拍摄与制作:短视频 商品视频 直播视频(第2版)》-课程标准
- 研发部年终总结和规划
- 石油开采技术服务支持合同
- 山东省烟台市2024届高三上学期期末考试英语试题 含解析
- 公司战略与风险管理战略实施
- 2024年-2025年《农作物生产技术》综合知识考试题库及答案
- 广东省广州市白云区2022-2023学年八年级上学期物理期末试卷(含答案)
评论
0/150
提交评论