1.保护程序免遭非法输入数据的破坏
通过三种方法来处理进来垃圾的情况
1)检查所有来源于外部的数据值
2)检查子程序所有输入参数的值
3)决定如何处理错误的输入数据
2.Assertions 断言
在实现中Assert是程序中的一条语句,它对一个boolean表达式进行判断,若这个值为true就说明程序正确,如果这个值为false就说明程序出现了问题,系统将给出警告或推出,一般来说assert用于保证程序最基本关键的正确性,assert检查通常在开发和测试时开启,为了提高性能,assert检查在发布后是关闭的。
.NET SDK 包含两个调试器:CORDBG.EXE 和 DBGURT.EXE。其中,DBGURT.EXE 是较好的 GUI,CORDBG.EXE 是基于控制台的版本。
讨论断言之前不得不说的一个是条件编译,因为离开了条件编译,断言将不复存在。C#中支持的条件编译有两种#ifdef ........#endif和自定义属性Conditional。
#ifdef #endif的用法
#if DEBUG
public static void DebugOnlyMethod2()
{
Console.WriteLine("DEBUG2 is active!!");
}
#endif
static void Main(string[] args)
{
#if DEBUG
DebugOnlyMethod2();
#endif
}
条件属性的用法
[Conditional("DEBUG")]
public static void DebugOnlyMethod()
{
Console.WriteLine("DEBUG is active!!");
}
static void Main(string[] args)
{
DebugOnlyMethod();
}
只有在编译时使用了Debug,DebugOnlyMethod方法才会被执行
条件编译中使用断言,跟踪和TraceSwitch
BCL 提供了两个完全相同的类来处理跟踪和断言:Trace 和 Debug,这两个类之间的观念是:当您定义 DEBUG 类时,Debug 类是活动的;而当您定义 TRACE 时,Trace 类是活动的。根据文档资料,Microsoft 希望您对调试版本使用 DEBUG,而对所有版本使用 TRACE。
if ( true == bShowTrace )
{
Debug.WriteLine ("Num = " + Num + " value out of range!" ) ;
}
if ( true == bShowTrace )
{
Trace.WriteLine ("Num = " + Num + " value out of range!" ) ;
}
创建和使用 TraceSwitch 的过程有一些琐碎。下面的代码片段说明了 TraceSwitch 的创建和使用。我使用 WriteLineIf 压缩了该代码片段。
public static void Main ( )
{
TraceSwitch TheSwitch = new TraceSwitch (
"SwitchyTheSwitch", "Example Switch" );
Trace.WriteLineIf ( TheSwitch.TraceError ,
"Error tracing is on!" ) ;
Trace.WriteLineIf ( TheSwitch.TraceWarning ,
"Warning tracing is on!" ) ;
Trace.WriteLineIf ( TheSwitch.TraceInfo ,
"Info tracing is on!" ) ;
Trace.WriteLineIf ( TheSwitch.TraceVerbose ,
"VerboseSwitching is on!" ) ;
}