public bool Process(int iterations) {
Debug.Assert(iterations > 0, "Process", "迴圈次數必須大於 0");
// ...
}
僅編譯至 Debug 版本,不影響 Release 效能。
[Conditional("DEBUG")]
private void CheckInvariant() {
Debug.Assert(this != null, "狀態", "this 不可為 null");
// 更多狀態檢查
}
public void DoWork() {
CheckInvariant();
// ...
}
Release 自動移除呼叫。
private static TraceSwitch _switch = new TraceSwitch("MySwitch", "說明");
Debug.WriteLineIf(_switch.TraceInfo, "進入 DoWork", "CallTrace");
Debug:僅 Debug 版本Trace:Debug/Release 皆編譯,謹慎使用<configuration>
<system.diagnostics>
<switches>
<add name="MySwitch" value="4" /> <!-- 4=Verbose -->
</switches>
</system.diagnostics>
</configuration>
無需重新編譯即可調整追蹤等級。
Debug.Listeners.Add(new TextWriterTraceListener("mylog.log"));
// 或 EventLogTraceListener 寫入事件檢視器
找到 Bug 後不要移除斷言/追蹤代碼,它們是未來的安全網。