1.输出调试信息
在程序运行期间,把文本写入Output窗口是非常简单的,只要用需要的调用替代Console.WriteLine()调用,就可以吧文本写到希望的地方。此时可以使用如下两个命令:
Debug.WriteLine() 仅在调试模式下运行
Trace.WriteLine() 仅在发布程序运行
Debug.WriteLine("Text 1 and i", "myTag");
名称空间:using System.Diagnostics;
Debug.Write();
Trace.Write();
Debug.WriteLineIf();
Trace.WriteLineIf();
Debug.WriteIf();
Trace.WriteIf();
2.跟踪点tracepoint 是另一种把信息输出到Output窗口中的方法
3.中断调试
1.IDE的Pause按钮;
2.断点;
3.抛出未处理异常时进入;
4.判定语句 assertion;
4.错误处理
try...catch...finally c#语言包含结构化异常处理(Structured Exception Handing,SEH)的语法。
try
{
......
}
catch(<exceptionType>e)
{
......
}
finally
{
......6y
}
理解程序:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Ch07Ex02
{
class Program
{
static string[] eTypes = { "none", "simple", "index", "nested index" };
// Padding so that line numbers match those in the chapter.
//
//
//
static void Main(string[] args)
{
foreach (string eType in eTypes)
{
try
{
Console.WriteLine("Main() try block reached."); // Line 23
Console.WriteLine("ThrowException(\"{0}\") called.", eType); // Line 24
ThrowException(eType);
Console.WriteLine("Main() try block continues."); // Line 26
}
catch (System.IndexOutOfRangeException e) // Line 28
{
Console.WriteLine("Main() System.IndexOutOfRangeException catch"
+ " block reached. Message:\n\"{0}\"",
e.Message);
}
catch // Line 34
{
Console.WriteLine("Main() general catch block reached.");
}
finally
{
Console.WriteLine("Main() finally block reached.");
}
Console.WriteLine();
}
Console.ReadKey();
}
static void ThrowException(string exceptionType)
{
Console.WriteLine("ThrowException(\"{0}\") reached.", exceptionType); // Line 49
switch (exceptionType)
{
case "none":
Console.WriteLine("Not throwing an exception.");
break; // Line 54
case "simple":
Console.WriteLine("Throwing System.Exception.");
throw (new System.Exception()); // Line 57
case "index":
Console.WriteLine("Throwing System.IndexOutOfRangeException.");
eTypes[4] = "error"; // Line 60
break;
case "nested index":
try // Line 63
{
Console.WriteLine("ThrowException(\"nested index\") " +
"try block reached.");
Console.WriteLine("ThrowException(\"index\") called.");
ThrowException("index"); // Line 68
}
catch // Line 70
{
Console.WriteLine("ThrowException(\"nested index\") general"
+ " catch block reached.");
Modification for "Notes on Exception Handling" section
// throw;
}
finally
{
Console.WriteLine("ThrowException(\"nested index\") finally"
+ " block reached.");
}
break;
}
}
}
}
如果使用throw抛出catch块处理过的异常,那么该异常就不会由当前try...catch...finally块处理,而是由上一级代码处理,当前代码块的finally块仍然会执行。