第7章 调试和错误处理

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

7.1.2 中断模式下的调试
打开断点窗口查看文件中的断点信息
7.1.2 中断模式下的调试
断点信息的条件和命中次数:
7.1.2 中断模式下的调试
断点信息的条件和命中次数:
7.1.2 中断模式下的调试
断点信息的命中条件:
class Program { static void Main(string[] args) { int[] intArray = { 10,9,8,7,6,5,4,3,2,1}; int temp; for (int i = 1; i <= intArray.Length - 1; i++) { for (int j = 0; j < intArray.Length - i; j++) { if (intArray[j] > intArray[j + 1]) { temp=intArray[j]; intArray[j] = intArray[j + 1]; intArray[j + 1] = temp; } }}}}
Finally:包含总是会执行的代码,如 果没有产生异常,则在try块之后执行, 如果处理了异常,就在catch块后执行, 或者在未处理的异常中断应用程序之 前执行(此时处理这个块,其原因是 存在这个块,否则也可以在这个块的 后面放臵代码)。
7.2.1 try…catch…finally
在try块的代码中出现异常后,发生的事件依次是: ① 注意:有try块,则【如果没有catch块,就一定要有finally 块】 ② 没有参数的catch可以捕捉所有异常。 ③ Try块在发生异常的地方中断程序的执行。 ④ 如果没有catch块,程序就中断了,程序不会继续往下执行。 ⑤ 如果有catch块,就检查该块是否匹配于已发生的异常类型。 如果它与已发生的异常类型不匹配,就检查是否有其他catch 块匹配,如果没找到匹配的异常类型,也没有无参数的catch 块,则程序就中断了。 ⑥ 如果有catch块匹配于已发生的异常类型,就执行它包含的代 码,再执行finally块(如果有). ⑦ 在一个try…catch…finally结构中只可以有一个try和 finally,但可以有多个catch。 例子讲解:P141异常处理
输出调试信息
Debug和Trace的用法
输出调试信息
Debug和Trace的用法
输出调试信息
Debug和Trace的用法
输出调试信息
Debug和Trace的用法
输出调试信息
课本P124页示例 课堂操作 把信息输出到Output窗口中的另一种 方法是使用跟踪点(其作用与使用 Trace.WriteLine()的作用相同), 它是输出调试信息,但不修改代码 的一种方式。
7.1.2 中断模式下的调试
1.进入中断模式 添加断点的方式: ① 单击该代码行左边的灰色区域 ② 右击该代码行,选择断点|添加断点 菜单项,见右图:
7.1.2 中断模式下的调试
1.进入中断模式 添加断点的方式: ③ 把光标定位到需要添加断点的代码行 选择调试菜单项,见下图所示,选中切换断点或快捷键F9
添加跟踪点的过程:
课本P129页 课堂操作:添加跟 踪点,打开断点窗 口(Ctrl+D,B) 注意:跟踪点会在 执行这行代码之前 被处理。
诊断输出和跟踪点的区别
诊断输出:总是要从应用程序中输出 调试结果时使用这种方法,尤其是 在要输出的的字符串比较复杂,涉 及几个变量或许多信息的情况下, 使用该方法比较好,另外,如果要 在发布模式下获得执行应用程序的 调试结果,Trace命令常常是唯一的 选择。
7.2.1 try…catch…finally
基本结构如下: Try { … } Catch(exception e) { … } Finally { … }
Try:包含产生异常的代码
Catch:包含产生异常时要执行的代码。 Catch块可以使用<exceptionType>,设 臵为只响应特定的异常类型,以便提 供多个catch块,还可以完全省略这个 参数,让一般的catch快响应所有的异 常。
这两个函数带3个参数,第一个参数是一个布尔值,其 值为false会触发断定语句,第二,三个参数是两个 字符串,分别把信息写到弹出的对话框和Output窗 口中。
例子:
Trace.Assert(myVar < 10, "Variable out of bounds.", "Please contact vendor with the error code KCW001."); Trace.Assert(myVar < 10, "Variable out of bounds.", "Please contact vendor with the error code KCW001.");
}
分清 catch 代码检测的异常的 具体类型是很好的编程习惯。 每个 try 可以有多条 catch 语句,分别处理不同的异常。
}
}
catch (System.DivideByZeroException) { Console.WriteLine("There was an attempt to divide by zero."); }
课堂操作
7.1.2 中断模式下的调试
6.Call Stack(调用堆栈)窗口 它描述了程序是如何执行到当前位臵的,该 窗口显示了当前函数,调用它的函数,以及 调用函数的函数(即一个嵌套的函数调用列 表),调用的位臵也被记录下来。 课堂操作
7.2 错误处理
错误处理的目的:有时我们知道可能会有
错误发生,但不能100%地肯定它们不 会发生,此时我们就可以为错误的发 生提供解决办法,而不必中断程序的 执行。
7.1.2 中断模式下的调试
5.即时窗口和命令窗口 Immediate(即时) 窗口:可以执行源代码,计算表 达式(只需按回车键即可)还可以执行其他代码。 输入命令immed,可以从Command窗口切换到 Immediate窗口; 输入命令>cmd,可以从Immediate 窗口切换到 Command窗口;
7.2 try...catch
try 和 catch 关键字一起使用。使用 try 将您认 为可能会生成异常的代码块括起来,使用 catch 将发生异常时要执行的代码括起来。 例如:计算会创建被零除的异常,然后捕获该异常。 如果没有 try 和 catch 块,此程序将失败。
class ProgramTryCatch { static void Main() { int x=0, y=0; try { x = 10 / y;
7.1 VS和VCE中的调试
错误:
①程序致命错误
②语法错误
③逻辑错误
7.1 VS和VCE中的调试
应用程序的执行:
①调试模式(F5)
②非调试模式(Ctrl+F5)wenku.baidu.com
7.1.1 非中断(正常)模式下的调试
非中断模式下的调试是指:不中断程序的 运行,而是在程序运行过程输出一些程 序运行过程中的数据,然后由开发人员 根据输出的信息来对程序进行诊断。
思考:“使用Trace.WriteLine(<调试信 息>)要优于使用Debug.WriteLine(<调试 信息>),因为调试版本仅能用于调试程 序”这个观点正确吗?为什么?
答:观点不正确,Debug.WriteLine()命令不 能编译为可发布的程序(这样可以让我们编 译好的代码文件比较小),调试(Debug)版本 会显示所有的额外诊断信息,有利于我们调 试程序,而Trace.WriteLine()命令,可在发 布(Release)版本中使用,如果把调试信息用 该命令输出,则会导致在输出窗口中有很多 用户不需要知道的消息,这也会让用户觉得 很讨厌。
异常:代码中产生的错误,或者在运行 期间由代码调用的函数产生的错误, 是一种无法控制的错误。
7.2 错误处理
如果 C# 程序运行期间发生错误,异常 就会发生。异常会中止当前的程序流, 如果不采取措施,程序将停止运行。 异常可能会由程序中的 bug(例如数 字被零除)或某些意外输入(如用户 选择了不存在的文件)而造成。作为 程序员,您需要使程序能够处理这些 问题,避免程序崩溃至暂停。
可以使用Debug和Trace对象来输出调试
信息,调试信息将在VS 2008的输出窗口 显示。
Debug与Trace的区别
使用Debug和Trace都可以输出调试信息, 但它们之间存在如下区别: ①优点:Debug对象只在调试模式下发挥 作用,也就是说只有在调试模式下才 能看到用Debug输出的调试信息,在发 布版本中,该命令不起作用。 ②Trace对象在Debug模式和Release模式 下都能发挥作用,不受影响。
课堂操作
7.1.2 中断模式下的调试
3.监视变量的内容 在中断模式下底部有几个窗口: 自动窗口(自动监视):当前使用的变量和前面的语 句(Ctrl+D,A) 局部变量:作用域内的所有变量( Ctrl+D,L ) 监视窗口(至多可以显示4个):可定制的变量和表达 式 快速监视窗口:快速提供源代码种某个变量的详细信 息 课堂操作
如何捕捉异常
int top = 0, bottom = 0, result = 0;
try {
result = top / bottom; } catch (System.Exception ex) { Console.WriteLine("{0} exception caught here.", ex.GetType().ToString()); Console.WriteLine(ex.Message); } finally { Console.WriteLine("Clean-up code executes here..."); } Console.WriteLine("Program execution continues here...");
诊断输出和跟踪点的区别
跟踪点:调试应用程序时,希望快速 输出重要信息,以便解决语义错误, 应使用跟踪点。
7.1.2 中断模式下的调试
1.进入中断模式 第一种方式:使用IDE中的暂停按钮 应用程序启动按钮 暂停应用程序的执行,进入中断模式 完全停止应用程序的执行,退出程序 重新启动应用程序
通过这种方式进入中断模式,不好控制中断 的位臵
7.1.2 中断模式下的调试
4.单步执行代码
逐语句:执行并移动到下一个要执行的语句上 逐过程:同上,但不进入嵌套的代码块,包括函数
跳出:执行到代码块的末尾,在执行完该语句块后, 重新进入中断模式。
课堂操作
7.1.2 中断模式下的调试
5.即时窗口和命令窗口 Immediate 窗口:可以执行源代码,计算表达式 (只需按回车键即可)还可以执行其他代码。
断点实例
断点实例条件设置窗口
7.1.2 中断模式下的调试
2.进入中断模式的其他方式 进入中断模式还有两种方式: ①一种是在产生一个未处理的异常时选择进入该模式。 ②另一种方式是生成一个判定语句时中断。 断定函数有两个版本: Debug.Assert() Trace.Assert()
7.1.2 中断模式下的调试
第7章 调试和错误处理
本章的主要内容: 1.VS中的调试方法 2.C#中的可用的错误处理技术
第7章
7.1 VS和VCE中的调试
7.1.1 非中断(正常)模式下的调试 7.1.2 中断模式下的调试
7.2 错误处理
7.2.1 try...catch...finally 7.2.2 列出和配臵异常 7.2.3 异常处理的注意事项
7.3 小结 7.4 练习
为什么需要调试程序
由于人思维的局限性,很难保证人编写 的程序不出现任何错误,即使是非常优 秀的程序员也无法保证代码不出现问题。 据统计,在编码过程中,有40%的时间 花在编写代码上,而另外60%的时间却 是花在程序的调试上的。 因此,对代码进行调试,是软件开发人 员的一项日常工作。
7.1.2 中断模式下的调试
1.进入中断模式 第2种方式:使用断点 在遇到断点时,立即进入中断模式 (只用于VS)在遇到断点时,如果布尔表达式的值为true, 就进入中断模式 (只用于VS)遇到某断点一定的次数,进入中断模式 (只用于VS)在遇到断点时,如果自从上次遇到断点以来变 量的值发生了变化,就进入中断模式 (只用于VS)把文本输出到Output窗口中,或者执行一个宏 注意:上述功能仅能用于调试程序,如果编译发布程序,就会 忽略所有的断点。
相关文档
最新文档