【C#】基础知识—程序调试与异常处理机制
2016-05-03 15:31
549 查看
一、程序调试
1. 概念
程序调试是在程序中查找错误的过程,在开发过程中,程序调试是检查代码并验证它能够正常运行的有效方法。在编写程序的时候,难免会遇到一些错误,为了解决这些错误就需要程序员对运用程序进行调试,查出错误的根源。
2. 调试的思路
1)断点操作:插入断点 -- 调试切换断点 -- 删除断点
2)开始执行:调试,启动调试 -- 右击选中行,运行到光标处
3)中断操作:
4)停止执行
5)单步执行和逐过程执行
单步执行,调试器每次只执行一行代码,单步执行主要是通过逐语句、逐过程和跳出这3中命令实现的。逐语句和逐过程的主要区别就是当某一行包含函数调用时,逐语句仅执行调用本身,然后在函数内的第一个代码行处停止。而逐过程执行整个函数,然后在函数外的第一行处停止。
快捷键:F11:逐语句操作 F10:逐过程操作 shift + F10:执行跳出操作
调试过程中要善于利用断电测试,特别是在循环语句中使用断点测试效率比较高。
二、异常处理语句
在C#程序中,可以使用异常处理语句处理异常。通常使用的异常处理一句有throw语句、try.....catch语句和try.....catch.....finally语句。通过这些语句,可以对可能产生异常的程序代码进行监控。
1. 使用throw语句跑出异常
throw语句用于主动引发一个异常,即在特定的情况下自动抛出异常。throw语句的基本格式如下:
案例:
try.....catch语句允许在try后面的大括号{}中放置可能发生异常的程序代码,并对这些程序代码进行监控,而catch后面的大括号{}中则放置处理错误的程序代码,以处理程序发生的异常。try.....catch语句的基本格式如下:
注意:
1)try....catch语句可以包含多个catch语句,但程序只执行一个catch语句中的信息,其他的catch语句被忽略了。
2)在catch语句中,异常类名必须为System.Exception或从System.Exception派生的类型。当catch语句指定了异常类名和异常变量名后,就相当于声明了一个具有给定名称和类型的异常变量,此异常变量表示当前正在处理的异常。
案例:
将finally语句与try......catch语句结合,可以形成try......catch......finally语句。finally语句同样以区块的方式存在,它被放在所有try....catch语句的最后面,程序执行完毕,最后都会调到finally语句区块,执行其中的代码。
注意:如果程序中有一些在任何情况下都要执行的代码,则可以将其放在finally语句中。
案例一:
案例二:
程序执行完毕.....
综合运用:数据库连接过程中使用异常捕捉
1. 概念
程序调试是在程序中查找错误的过程,在开发过程中,程序调试是检查代码并验证它能够正常运行的有效方法。在编写程序的时候,难免会遇到一些错误,为了解决这些错误就需要程序员对运用程序进行调试,查出错误的根源。
2. 调试的思路
1)断点操作:插入断点 -- 调试切换断点 -- 删除断点
2)开始执行:调试,启动调试 -- 右击选中行,运行到光标处
3)中断操作:
4)停止执行
5)单步执行和逐过程执行
单步执行,调试器每次只执行一行代码,单步执行主要是通过逐语句、逐过程和跳出这3中命令实现的。逐语句和逐过程的主要区别就是当某一行包含函数调用时,逐语句仅执行调用本身,然后在函数内的第一个代码行处停止。而逐过程执行整个函数,然后在函数外的第一行处停止。
快捷键:F11:逐语句操作 F10:逐过程操作 shift + F10:执行跳出操作
调试过程中要善于利用断电测试,特别是在循环语句中使用断点测试效率比较高。
二、异常处理语句
在C#程序中,可以使用异常处理语句处理异常。通常使用的异常处理一句有throw语句、try.....catch语句和try.....catch.....finally语句。通过这些语句,可以对可能产生异常的程序代码进行监控。
1. 使用throw语句跑出异常
throw语句用于主动引发一个异常,即在特定的情况下自动抛出异常。throw语句的基本格式如下:
throw ExObjectExObject:所要抛出的异常对象,这个异常对象时派生自Sytem.Exception类的对象。
案例:
namespace 第01个项目 { public class StudentName { class Program { static void Main(string[] args) { Console.WriteLine("第一次分子除以分母的值: " +MyInt(4, 2)); Console.WriteLine("第二次分子除以分母的值: " + MyInt(4, 0)); Console.ReadKey(); } // public static int MyInt(int a, int b) { int num; if (b == 0) { throw new DivideByZeroException(); // 抛出DivideByZeroException类的异常 return 0; } else { num = a / b; return num; } } } } }2. 使用try.....catch语句捕捉异常
try.....catch语句允许在try后面的大括号{}中放置可能发生异常的程序代码,并对这些程序代码进行监控,而catch后面的大括号{}中则放置处理错误的程序代码,以处理程序发生的异常。try.....catch语句的基本格式如下:
try { 被监控的代码; } catch(异常类名,异常变量名) { 异常处理; }
注意:
1)try....catch语句可以包含多个catch语句,但程序只执行一个catch语句中的信息,其他的catch语句被忽略了。
2)在catch语句中,异常类名必须为System.Exception或从System.Exception派生的类型。当catch语句指定了异常类名和异常变量名后,就相当于声明了一个具有给定名称和类型的异常变量,此异常变量表示当前正在处理的异常。
案例:
public static void ceshi() { static void Main(string[] args) { ceshi(); Console.WriteLine("请输入张三的分数"); try { int score = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("int try"); } catch { Console.WriteLine("in catch"); } Console.WriteLine("over"); Console.ReadKey(); } try { object obj = null; int N = (int)obj; // 拆箱,将obj类型强制转化为int类型 } catch(Exception ex) { Console.WriteLine("异常捕捉: "+ex); } }3. 使用try.....catch.....finally语句捕捉异常
将finally语句与try......catch语句结合,可以形成try......catch......finally语句。finally语句同样以区块的方式存在,它被放在所有try....catch语句的最后面,程序执行完毕,最后都会调到finally语句区块,执行其中的代码。
try { 被监控的代码; } catch(异常类名,异常变量名) { 异常处理; }
.....
finally
{
程序代码;
}
注意:如果程序中有一些在任何情况下都要执行的代码,则可以将其放在finally语句中。
案例一:
#region 异常捕捉 int str = 123; // 声明一个int类型的变量 object obj = str; // 进行装箱 try { int i = (int)obj; // 将obj强制转化为int类型——拆箱 } catch(Exception ex) { Console.WriteLine(ex.Message); // 抛出异常信息:“不会抛出异常” } finally { Console.WriteLine("程序执行完毕....."); // finally语句 } #endregion输出:程序执行完毕.....
案例二:
string str = "hello"; // 声明一个string类型的变量 object obj = str; // 进行装箱 try { int i = (int)obj; // 将obj强制转化为string类型——拆箱 } catch(Exception ex) { Console.WriteLine(ex.Message); // 抛出异常信息:制定的转换无效 } finally { Console.WriteLine("程序执行完毕....."); // finally语句 } #endregion输出:指定的转换无效
程序执行完毕.....
综合运用:数据库连接过程中使用异常捕捉
#region 异常捕捉应用在数据库的链接 SqlConnection sqlcon = new SqlConnection("Data Scource = (local); Database = master; uid = sa; pwd = 123;"); try { sqlcon.Open(); // 打开数据库链接 Console.WriteLine("连接成功"); } catch (SqlException ex) { Console.WriteLine(ex.Message); } #endregion
相关文章推荐
- PHPLog php 程序调试追踪工具
- 2007/12/23更新创意无限,简单实用(javascript log)
- linux下c/c++程序调试拾遗
- 异常处理机制:finally的执行时机
- __try,__except,__finally,__leave
- 在.NET里面实现异常处理功能讨论(编写Try/Catch)
- JAVA异常处理的方法
- C++深入体验之旅九:程序调试
- Python - Python的异常处理机制
- EBS接口程序调试
- java异常处理Exception
- c++ try catch throw 简单用法
- Javascript学习--------程序调试和错误处理
- 【JAVA教程】如何有效处理Java异常三原则
- 程序调试技术(JUnitTest)
- 调试程序的利器--日志
- android 程序调试出现source not found的问题
- [Web开发] Web程序调式的利器 - Fiddler (HTTP协议监视工具)
- 【JAVA基础教程】java中异常机制总结
- 如何使用Visual Studio调试C#程序