按 Ctrl+W+O调出 输出窗口
Debug.WriteLine();
Trace.WriteLine();
以上方法是将信息输出到输出窗口以便于查出错误,这两个的方法基本相同,不同的是前者的的信息在发布程序时,不作为程序的内容。好处是使程序体积小。由于在出现错误的时候不提醒用户哪里出错了,会给用户带来用户体验的损失,所有后者可以把信息发布到程序中。
Debug.Assert()
Trace.Assert()
用于中断模式 详情参照msdn
try
{
//执行的代码,其中可能有异常。一旦发现异常,则立即跳到catch执行。否则不会执行catch里面的内容
}
catch
{
//除非try里面执行代码发生了异常,否则这里的代码不会执行
}
finally
{
//不管什么情况都会执行,包括try catch 里面用了return ,可以理解为只要执行了try或者catch,就一定会执行 finally
}
try-catch 语句由一个 try 块后跟一个或多个 catch 子句构成,这些子句指定不同的异常处理程序。
在同一个 try-catch 语句中可以使用一个以上的特定 catch 子句。这种情况下 catch 子句的顺序很重要,因为会按顺序检查catch 子句。将先捕获特定程度较高的异常,而不是特定程度较小的异常。
在 catch 块中可以使用 throw 语句再次引发已由 catch 语句捕获的异常。例如:
catch (InvalidCastException e) { throw (e); // Rethrowing exception e }
如果要再次引发当前由无参数的 catch 子句处理的异常,则使用不带参数的 throw 语句。例如:
catch { throw; }
// try_catch_ordering_catch_clauses.cs using System; class MainClass { static void ProcessString(string s) { if (s == null) { throw new ArgumentNullException(); } }
static void Main() { try { string s = null; ProcessString(s); } // Most specific: catch (ArgumentNullException e)//第一种错误类型成立则执行代码块的代码 { Console.WriteLine("{0} First exception caught.", e); } // Least specific: catch (Exception e) //第一种错误类型成立则执行代码块的代码 { Console.WriteLine("{0} Second exception caught.", e);
} } }
// try-finally
using System;
public class MainClass
{
static void Main()
{
int i = 123;
string s = "Some string";
object o = s;
try
{
// Invalid conversion; o contains a string not an int
i = (int)o;
}
finally
{
Console.Write("i = {0}", i);
}
}
}