デバッグ時のみ出力したり関数実行したりする
前回の記事でConditional属性について学んだので早速デバッグ用の関数を作ってみました。
-- lib/debug.cs -- using System; using System.Diagnostics; namespace MyLib { public static class debug { // デバッグ改行出力関数 [Conditional("DEBUG")] public static void wl (object s) { Console.WriteLine(s); } [Conditional("DEBUG")] public static void wl (string s, params object[] obj) { var sout = string.Format(s,obj); Console.WriteLine(sout); } // デバッグ出力関数 [Conditional("DEBUG")] public static void w (object s) { Console.Write(s); } [Conditional("DEBUG")] public static void w (string s, params object[] obj) { var sout = string.Format(s,obj); Console.Write(sout); } // デバッグ時のみ有効な関数を実行 [Conditional("DEBUG")] public static void f (Action func) { func(); } } }
-- main.cs -- using System; using MyLib; class Program { static void Main() { Console.WriteLine("foo1"); // DEBUG時のみ出力 debug.wl("foo2"); Console.WriteLine("foo3"); // DEBUG時のみ実行される処理 debug.f(() => { Console.WriteLine("foo4-1"); Console.WriteLine("foo4-2"); Console.WriteLine("foo4-3"); }); Console.WriteLine("foo5"); } }
DEBUG有り
$ csc /define:DEBUG main.cs lib\*.cs Microsoft (R) Visual C# 2010 Compiler version 4.0.30319.1 Copyright (C) Microsoft Corporation. All rights reserved. $ main foo1 foo2 foo3 foo4-1 foo4-2 foo4-3 foo5
DEBUG無し
$ csc main.cs lib\*.cs Microsoft (R) Visual C# 2010 Compiler version 4.0.30319.1 Copyright (C) Microsoft Corporation. All rights reserved. $ main foo1 foo3 foo5
うまくいってますね。今後使って行きたいと思います。