C#的调试和错误处理
再优秀的程序员在编程的过程中也会犯些错误,何况是我们这些初级程序学者;好的程序员会找出一些错误并修改它们.有时候程序中存在一些微妙的错误我们发现不了的时候就得跟踪代码进行调试.
一.Visual Studio中的调试
在调试模式下运行程序时,运行的是编写好的代码.调试程序的信息在VS执行每行代码过程中发生了甚么都有记录,这些信息保存在Debug目录下的.pdb格式文件中.
在运行期间把文本写入Output窗口是非常简单的.此时可以使用一下两个命令:
Debug.WriteLine()
Trace.WriteLine()
这两个命令函数的使用方法差不多,区别在第一个命令是在调试模式下运行而第二个还可以用于发布程序.引用这两个函数还要在命名空间中加入: using System.Diagnostics;
static int MaxNum(int[] a)// { Debug.WriteLine("sort array begin"); int max = a[0]; int index; for (int i = 1; i < a.Length; i++) { if (max < a[i]) { max = a[i]; //中断点设计 index = i; } } Trace.Write("the index of the bigest number is"); return max; |
其实有关调试的问题都可以自己解决,只有那些专门研究程序运行过程实现的人才会去关注Debug的过程,一般我们在发现程序没有错误可以运行的时候就不关心具体的执行过程.
二.异常处理.
在程序运行过程中存在异常,例如在打开文件的时候要判断文件是否存在才能打开,如果不存在就可能引起异常导致程序中止.如果可能存在异常就要用一下的方法处理.,以保证程序正常运行.
try { <可能包含异常的执行过程> } catch(Exception 捕获异常) { <异常处理> } finally{<最终会做甚么> } |
异常的类型:1基本Exception.2: Application Exception类 3 与参数有关的异常类: ArgumentException类Format Exception类: 4: 与成员访问有关的异常MemberAccessException类,该类包括三种子类 FileAccessException类: MethodAccessException类: |
下来的例子在数据处理过程中很常见.
int x1 = 40; int x2 = 0; int x3; Label re = new Label(); re.Text=Convert.ToString(x1/x2) 执行结果是
|
Try---catch---finally的异常处理模式是这样的执行的.
Try是程序意图做甚么,Catch是捕获Try过程中可能出现的异常,如果有异常的话而且异常和Catch的类型一样,Catch处理异常.finally中的代码不管有没有异常都会执行.当然可以有多个Catch来处理捕获程序执行过程中可能出现的多个异常.
这里就不多说了.下面列举出C#处理过程中存在的不同异常类型.,
MemberAccessException 访问错误:类型成员不能被访问
ArgumentException 参数错误:方法的参数无效
ArgumentNullException 参数为空:给方法传递一个不可接受的空参数
ArithmeticException 学计算错误:由于数学运算导致的异常,覆盖面广。
ArrayTypeMismatchException 数组类型不匹配
DivideByZeroException 被零除
FormatException 参数的格式不正确
IndexOutOfRangeException 索引超出范围,小于0或比最后一个元素的索引还大
InvalidCastException 法强制转换,在显式转换失败时引发
MulticastNotSupportedException 不支持的组播:组合两个非空委派失败时引发
NotSupportedException 调用的方法在类中没有实现
NullReferenceException 引用空引用对象时引发
OutOfMemoryException 无法为新语句分配内存时引发,内存不足
OverflowException 溢出
StackOverflowException 栈溢出
TypeInitializationException 错误的初始化类型:静态构造函数有问题时引发
NotFiniteNumberException