您的位置:首页 > 编程语言 > C#

【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语句的基本格式如下:

throw ExObject
ExObject:所要抛出的异常对象,这个异常对象时派生自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


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息