程序调试技术杂谈PPT课件.ppt_第1页
程序调试技术杂谈PPT课件.ppt_第2页
程序调试技术杂谈PPT课件.ppt_第3页
程序调试技术杂谈PPT课件.ppt_第4页
程序调试技术杂谈PPT课件.ppt_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

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

文档简介

程序调试技术杂谈 武汉天喻软件有限责任公司国家企业信息化应用支撑软件工程技术研究中心 C 培训系列 内容 程序的错误分类程序的生成生成的配置管理程序的调试和调试相关的配置设置几种类型文件的调试程序设计中的建议备注 不讲解Web和远程调试 程序错误类型 生成错误由编译系统来检查 将警告的级别提高到最高级 启动代码分析工具怎样看各种连接错误逻辑错误程序流程中地错误 需要调试人员对程序的执行逻辑有清楚的认识结合调试工具定位错误的位置和原因 程序的生成配置 解决方案和项目配置 解决方案配置项目之间的依赖关系 启动项目可以执行多个项目调试进行配置管理项目配置确定各个项目的内部生成属性系统默认情况下生成 调试 配置和 发布 配置 自动配置 调试 配置以便调试应用程序 配置 发布 配置以便用于应用程序的最终发布配置管理器的使用 配置管理器使用 程序调试 调试设置程序中的应用启动调试的方法第三方程序应用程序DLL调试执行及相关控制 调试器设置 启动调试设置界面 理解各个选项的含义 工具 选项 对话框 调试 文件夹 选择所需选项的类别 C 调试配置的项目设置 C 调试配置的项目设置 C 调试配置的项目设置 C 调试配置的项目设置 在VisualC 中启用调试功能 在VisualC 中启用调试 如果在编译程序时定义了 DEBUG符号 则将启用某些调试功能 如断言 可以用下列两种方法之一定义 DEBUG在源代码中指定 define DEBUG 指定 D DEBUG编译器选项 如果是在VisualStudio中使用向导创建项目 则 D DEBUG将在 调试 配置中自动定义 在定义了 DEBUG后 编译器将编译包围在 ifdef DEBUG和 endif内的代码段 程序数据库 PDB 文件 作用保存着调试和项目状态信息指定符号路径 工具 菜单 选项 对话框 调试 节点 符号 类别 符号文件 pdb 位置 手动加载符号从 模块 窗口中手动加载DBG文件 启动调试的方法 启动调试的方法 不属于解决方案的可执行文件 在VisualStudio外部启动可执行文件并使用VisualStudio调试器附加到该文件需要手动执行一些步骤 不能调试启动过程中发生的问题 不能调试不等待用户输入而迅速完成的程序为此类程序创建EXE项目 属于解决方案的调试 EXEDLL控制台 调试的启动 调试的启动 调试命令 启动 逐语句 逐过程调试多进程停止调试或停止执行调试中断达到断点 发生异常 手工中断更改调试多个程序时的中断行为工具 选项 调试 常规 一个进程中断时则中断所有进程 单步执行 逐语句逐过程跳出单步执行特定函数运行到指定位置设置断点运行到光标位置运行到指定函数查找函数设断点在 调用堆栈 窗口中 右击该函数名 并从快捷菜单中选择 运行到光标处 调试断点 断点 简单断点 调试 切换断点 源代码行的最左边空白鼠标左键单击指定源代码行的右键菜单地址断点 反汇编 窗口中采用上面的方法设置函数断点删除 启用 禁用断点删除 启用 禁用所有断点 断点 编辑断点位置指定断点筛选器指定命中次数指定断点条件指定跟踪点 断点操作 调试器中的数据查看 使用数据提示功能可视化工具变量窗口快速监视对话框寄存器窗口内存窗口调用堆栈窗口反汇编窗口模块窗口 调试器中的表达式 VisualStudio调试器包括表达式计算器 当您在 快速监视 对话框 监视 窗口或 即时 窗口中输入表达式时 这些计算器可以对其进行计算 这些表达式计算器还可以在 断点 窗口和调试器中的许多其他位置使用 异常处理 调试 调试器识别下列类别的异常 C 异常公共语言运行时异常托管调试助手本机运行时检查Win32异常 异常处理 调试 在引发异常时中断的方法异常中断的管理 本机代码程序 调试优化的代码使用 debugbreak函数使用断言内存泄漏的检测和隔离 断言 通过在代码中大量使用断言 可以在开发期间捕捉许多错误 为所做的每个假定编写一个断言是很好的规则 例如 如果假定某个参数不为NULL 请使用一条断言语句检查该假定 CRT断言 ASSERT ASSERTE使用断言一般不需要使用printf检查堆是否损坏 ASSERTE CrtCheckMemory 检查指针有效性 ASSERTE CrtIsValidPointer address size TRUE ASSERTE CrtIsValidPointer myData 检查内存块 ASSERTE CrtIsMemoryBlock myData size MFC断言 ASSERT VERIFY 注意ASSERT的副作用 ASSERT pObject1 IsKindOf RUNTIME CLASS CPerson CObject AssertValidASSERT VALID m pDataList 可以使用断言来捕捉逻辑错误 进行结果检查 测试错误条件 内存泄漏的检测和隔离 CRT启用内存泄漏检测 define CRTDBG MAP ALLOC include include 将malloc和free函数映射到其 Debug 版本 malloc dbg和 free dbg 程序结束时调用 CrtDumpMemoryLeaks 或程序开始时调用 CrtSetDbgFlag CRTDBG ALLOC MEM DF CRTDBG LEAK CHECK DF MFC内存泄漏检测 definenewDEBUG NEWAfxEnableMemoryTrackingafxMemDF MFC调试 AfxDebugBreakTRACE宏Err hr0 x80000004 hr 程序设计中的建议 编写必要的注释尽可能正确使用ASSERT 对输入不信任 对输出保证其正确性代码命名的规范 程序设计中的建议 编写必要的注释 程序设计中的建议 BOOLCGlobalSetting EE WriteProfileStringEx LPCTSTRpszElement LPCTSTRpszKeyAttr LPCTSTRpszKeyAttrValue LPCTSTRpszWriteAttrName LPCTSTRpszWriteAttrValue if NULL m pXMLConfig returnFALSE ASSERT AfxIsValidString pszElement ASSERT AfxIsValidString pszKeyAttr ASSERT AfxIsValidString pszKeyAttrValue if pszElement pszKeyAttr pszKeyAttrValue returnFALSE 对输入不信任 对输出保证其正确性尽可能正确使用ASSERT 程序设计中的建议 尽量用const和inline而不用 define definemax a b a b a b inta 5 b 0 max a b a的值增加了2次max a b 10 a的值只增加了1次 inlineintmax inta intb returna b a b templateinlineconstT 程序设计中的建议 尽量用new和delete而不用malloc和free malloc和free 及其变体 会产生问题的原因在于它们太简单 他们不知道构造函数和析构函数 程序设计中的建议 对应的new和delete要采用相同的形式指针初始化为NULL delete之后设置为NULL string stringptr1 newstring string stringptr2 newstring 100 deletestringptr1 删除一个对象Stringptr1 NULL delete stringptr2 删除对象数组Stringptr2 NULL 程序设计中的建议 在operator 中检查给自己赋值的情况 c 程序设计中的建议 尽可能使用const char p hello 非const指针 非const数据constchar p hello 非const指针 const数据char constp hello const指针 非const数据constc

温馨提示

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

评论

0/150

提交评论