程序调试

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

北京交通大学计算机与信息技术学院
教师: 林友芳
对项目配置的理解
可以从这个角度来简化理解(不够准确)
每一个project都有一个开发状态,称为debug 与release,得到的编译结果分别称为
Debug版程序 还处于调试状态的程序 Release版程序 最终提交给用户的可以执行的程 序
问题
Debug版与Release版有什么区别?
Project settings—项目设置 Project configuration—项目配置
北京交通大学计算机与信息技术学院
教师: 林友芳
Project settings
项目具有许多属性,如:
编译结果输出目录 工作目录 编译参数 需要链接的函数库 编译完以后做什么操作 编译前要做的操作 …
了解这些属性的意义以后,我们可以对这些属性 值进行设置,以影响编译器的编译行为。
北京交通大学计算机与信息技术学院
教师: 林友芳
本课件中的采用范例及流程说明
课堂演示程序
跟踪执行从程序开 始 显示菜单 执 行第13个功能 重 新显示菜单 结束 运行的全过程
北京交通大学计算机与信息技术学院
教师: 林友芳
设断点
断点标志
主函数里只有 两条语句,调 用主循环后返 回
断点标志
北京交通大学计算机与信息技术学院
北京交通大学计算机与信息技术学院
教师: 林友芳
设置断点方法
可以通过下述方法设置断点 方法1—简单方法
把光标移动到需要设置断点的代码行上,然后按F9快 捷键,或者点工具条上的小手图标。
方法2—功能更强大的一种方法
弹出Breakpoints对话框 按快捷键CTRL+B或ALT+F9,或者通过菜单 Edit/Breakpoints打开。 打开后点击Break at编辑框的右侧的箭头,选择 合适 的位置信息。一般情况下,直接选择line xxx就足够了, 如果想设置不是当前位置的断点,可以选择Advanced, 然后填写函数、行号和可执行文件信息。
/Zd
Line Numbers Only
/Z7
C 7.0- Compatible
/Zi
Program Database Program Database for Edit and Continue
/ZI
看不懂可先不看
北京交通大学计算机与信息技术学院 教师: 林友芳
4. 怎么调程序?
辅助我们调试程序的工具称为IDE 的调试器debugger
北京交通大学计算机与信息技术学院
教师: 林Baidu Nhomakorabea芳
区别
问题:什么叫优化? 为什么不能优化
标准的Debug版的项目配置指示编译器在 编译时,使项目或程序中包含有调试信息, 对程序不做任何的优化,便于程序员调试 程序。 标准的Release版的配置指示编译器在编译 时对程序进行优化。得到的结果在代码大 小和运行速度上都是较优的,程序中也不 包含调试信息。
如何进行入调试?
方法1. 菜单:Build Start Debug Go 方法2. 直接点击工具条上的Go按钮 方法3. 按热键F5
想让程序停下来,怎么办?
北京交通大学计算机与信息技术学院
教师: 林友芳
设置断点
断点是 最常用的技巧。 断点是调试器设置的一个代码位置。当程 序运行到断点时,程序中断执行,回到调 试器。 调试时,只有设置了断点并使程序回到调 试器,才能对程序进行在线调试。
教师: 林友芳
设置断点对话框
北京交通大学计算机与信息技术学院
教师: 林友芳
去掉断点
把光标移动到给定断点所在的行,再次按 F9就可以取消断点。 同前面所述,打开Breakpoints对话框后, 也可以按照界面提示去掉断点。
北京交通大学计算机与信息技术学院
教师: 林友芳
条件断点(有点难)
可以为断点设置一个条件,这样的断点称为条件 断点。对于新加的断点,可以单击Conditions (条件)按钮,为断点设置一个表达式。 当这个表达式发生改变时,程序就被中断。
北京交通大学计算机与信息技术学院 教师: 林友芳
消息断点(有点难)
VC也支持对Windows消息进行截获。他有 两种方式进行截获:窗口消息处理函数和 特定消息中断。
北京交通大学计算机与信息技术学院
教师: 林友芳
5. 设了断点以后,如何走程序?
进入调试: 1. 点此按钮 2. 按F5 3. Build Start Debug Go
北京交通大学计算机与信息技术学院
教师: 林友芳
黄色右箭头表示 当前就要执行的 代码行
当前执行中的 上下文(语境, 函数) 自动给出的当前 语境下的变量值、 返回值观察窗口
Debug工具栏
自定义的观察窗 口,可以定义多 组
北京交通大学计算机与信息技术学院
教师: 林友芳
掌握Debug工具条的主要按钮含义
北京交通大学计算机与信息技术学院
教师: 林友芳
watch
VC提供一种被称为Watch的机制来观看变 量和表达式的值。 在断点状态下,在变量上单击右键,选择 Quick Watch, 就弹出一个对话框,显示 这个变量的值。
北京交通大学计算机与信息技术学院
教师: 林友芳
watch
单击Debug工具条上的Watch按钮,就出现 一个Watch视图(Watch1, Watch2 , Watch3,Watch4),在该视图中输入变量 或者表达式,就可以观察 变量或者表达式 的值。 注意:这个表达式不能有副作用,例如++ 运算符绝对禁止用于这个表达式中,因为 这个运算符将修改变量的值,导致 软件的 逻辑被破坏。
教师: 林友芳
3. 项目配置与调试 Project Configuration and debugging
你是否注意到每个项目中的debug文件夹? 注意,本节有许多很理解的概念,如果暂时看 不懂,可以先跳过去。
什么叫项目?
项目即project,指通过设计实现一组程序 完成用户所需功能的工程及过程。 请查看《上机写程序》那个课件关于项目 的解释。 两个概念
Debug 默认的活跃的项目配置模板 Release
很有经验的程序员也可新建不同于这两组标准模 板的项目配置。
北京交通大学计算机与信息技术学院
教师: 林友芳
Set active project configuration
在同一时刻,只能有一个configuration是有效的 或活跃的。 在Build菜单下选择Set active project configuration.
北京交通大学计算机与信息技术学院
教师: 林友芳
当前就要执行 的代码行
语境切换成 MainLoop()
点击Step into后, 进入函数 MainLoop执行
北京交通大学计算机与信息技术学院
教师: 林友芳
6. 如何了解执行状态?
查看数值
VC支持查看变量、表达式和内存的值。所 有这些观察都必须是在断点中断的情况下 进行。 观看变量的值最简单,当断点到达时,把 光标移动到这个变量上,停留一会就可以 看到变量的值。
北京交通大学计算机与信息技术学院
教师: 林友芳
数据断点(有点难)
数据断点只能在Breakpoints对话框中设置。 选择“Data”页,就显示了设置数据断点的对话 框 。在编辑框中输入一个表达式,当这个 表达式的 值发生变化时,数据断点就到达。 一般情况下,这个表达式应该由运算符和全局变 量构成, 例如:在编辑框中输入 g_bFlag这个全局变量的 名字,那么当程序中有g_bFlag= !g_bFlag时,程 序就将停在这个语句处。
2. 解决程序中的错误的方法
基本方法—人工阅读走查,修改
程序员一行一行的看程序 根据实验数据,在脑子里或在纸上模拟程序运 行过程,在脑子里或纸上记录程序中间运行结 果。 在这过程中发现程序的错误。 修改发现错误,重新运行测试,如果还有错, 继续查看,修改。
这种方法是最为基本、人人都必须掌握的方法。 以前程序调试手段以少,人们经常只能用用纸、笔和脑来 模拟和记录程序动态运行中的状态。
Run to cursor 执行到当前光标处,
注意观察箭头 便于理解记忆
北京交通大学计算机与信息技术学院 教师: 林友芳
常用进程控制快捷键
快捷键 F5 SHIFT+F5 CTRL+F5 F7 CTRL+F7 F10 CTRL+F10 F11 SHIFT+F11 CRTL+SHIFT+F5 说明 go Step over Execute program Build Compile Step over Run to cursor Step into Step out Restart
北京交通大学计算机与信息技术学院
教师: 林友芳
Project Configuration
对项目的所有属性的一组设置值统称为一个 Project Configuration,即一组Project Settings统 称为一个Project Configuration. VC提供两组标准项目设置信息的Configuration模 板
北京交通大学计算机与信息技术学院
教师: 林友芳
Project Settings
北京交通大学计算机与信息技术学院
教师: 林友芳
一些编译选项及解释
选择C/C++页,Category中选择general ,则出现一个Debug Info (调试信息)下拉列表框,可供选择的调试信息 方式包括:
命令行 无 Project settings None 说明 没有调试信息 目标文件或者可执行文件中只包含全局和导出符号以及代 码行信息,不包含符号调试信息 目标文件或者可执行文件中包含行号和所有符号调试信息, 包括变量名及类型,函数及原型等 创建一个程序库(PDB),包括类型信息和符号调试信息。 除了前面/Zi的功能外,这个选项允许对代码进行调试过程 中的修改和继续执行。这个选项同时使#pragma设置的 优化功能无效
第4章第2部分 程序调试方法
1. 概述
什么叫调试?
程序没有语法错误,但运行结果不符合期望时, 采用适当的工具或方法,反复找出程序中存在 的问题,进行修改,最终使程序符合要求的过 程。
调试是一个程序员必须要掌握的基本技巧, 对于编写高质量程序非常重要。 掌握基本的调试技巧对今后的学习、工作 是非常必要的!
使程序员不需要完全只用脑或纸 和笔来记录程序的运行状态,并 保证中间结果的正确性
北京交通大学计算机与信息技术学院
教师: 林友芳
一些值得思考的问题
为什么集成开发环境能够让程序员调试程 序?是如何做到的? IDE要能使程序员调试一个程序,需要保存 关于程序的哪些信息?
调试信息
北京交通大学计算机与信息技术学院
step into 单步跟进,如果当前 语句有函数调用,则 单步进入函数执行, 否则单步执行完一条 语句。 Stop debugging 停止调试 step over 单步执行完当前语句, 若当前语句有函数调 用,除非被调用函数 中有断点,否则不会 跟进函数。 step out 执行完当前语句所在 函数的执行,返回该 函数的调用处。
北京交通大学计算机与信息技术学院
教师: 林友芳
为什么要调试?
问题
我的程序跟书上一样,怎么就不出结果呢? 我的程序没错啊,怎么不出结果啊? 我的程序运行结果不正确,如何找到错误?
原因
程序没有语法错误,不等于就没有语义错误。 要确保程序没错,必须对程序进行各种测试
北京交通大学计算机与信息技术学院
教师: 林友芳
北京交通大学计算机与信息技术学院 教师: 林友芳
基本方法存在的问题
这种方法效率不高,属于原始的方法。 要求程序员具有很强的源程序理解、运行过程记忆、预测、 纠错能力和经验。 程序员必须用脑子、纸、笔来模拟程序的运行状态
记录程序的执行进度 记录所有变量或数据变化过程 观察和记住执行过程中环境的变化
程序和模块达到一定规模以后,就很难这样方法调试,效 率太低,难度太大,很难发现问题,很难记录状态变化过 程。 程序员脑子中的计算与程序实际完成的计算往往有差异, 这样的差异是很难发现的,是很难在纸上体现出来的。
北京交通大学计算机与信息技术学院
教师: 林友芳
采用辅助工具来协助调试
随着技术的进步,各种IDE的功能越来越强大, 人们在IDE中实现并提供许多功能用来辅助程序 员对程序进行调试。 使程序员不需要再在 脑子中执行程序 IDE的辅助功能
提供工具让程序员能控制并看到程序的执行进程,如 单步执行,执行到某个位置,进入到某个函数内部执 行,… 在执行过程中,提供工具记录、展示甚至修改环境的 状态:变量值,内存数据,函数返回值,程序界面输 出结果,…
相关文档
最新文档