C#でのデバッグ出力方法とは?基本的な使い方・ファイル出力・デバッガでの変数表示・処理時間の計測

C#でのデバッグ出力方法とは?
今回は、C#でのデバッグ出力方法について説明します。System.Diagnostics.Debug.WriteLineメソッドを使用すると、VisualStudioの出力ウィンドウにデバッグメッセージが出力されます。
ここでは、基本的な使い方、デバッグメッセージのファイル出力、デバッガでの変数表示、処理時間の計測について紹介します。
C#でのデバッグ出力方法に興味のある方はぜひご覧ください。
基本的な使い方
C#でのデバッグ出力の方法を紹介します。System.Diagnostics.Debug.WriteLineメソッドを使用すると、VisualStudioの出力ウィンドウにデバッグメッセージが出力されます。実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
using System; using System.Diagnostics; namespace ConsoleApplication1 { public class program { public static void Main(string[] args) { // デバッグ出力 Debug.WriteLine("これはデバッグ出力メッセージです。"); // 変数をデバッグ出力することもできる Debug.WriteLine("現在時刻:" + DateTime.Now); } } } |
デバッグビルドで実行すると、出力ウィンドウに以下が表示されます。現在時刻は、実行タイミングによって結果が異なります。
1 2 |
これはデバッグ出力メッセージです。 現在時刻:2021/05/08 20:01:57 |
このようにC#では、System.Diagnostics.Debug.WriteLineメソッドでデバッグメッセージが出力できます。
ファイル出力
C#でのデバッグメッセージをファイル出力する方法を紹介します。ここでは、デフォルトのリスナを使用して、デバッグメッセージをファイルに出力します。実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
using System; using System.Diagnostics; namespace ConsoleApplication1 { public class program { public static void Main(string[] args) { // デフォルトのリスナを使用して、デバッグメッセージをファイルに出力する DefaultTraceListener dtl = (DefaultTraceListener)Trace.Listeners["Default"]; // ファイル名の指定 dtl.LogFileName = @"C:\test\debug.txt"; // デバッグ出力 Debug.WriteLine("これはデバッグ出力メッセージです。"); // 変数をデバッグ出力することもできる Debug.WriteLine("現在時刻:" + DateTime.Now); } } } |
デバッグビルドで実行すると、出力ウィンドウに以下が表示されます。現在時刻は、実行タイミングによって結果が異なります。
1 2 |
これはデバッグ出力メッセージです。 現在時刻:2021/05/08 20:20:19 |
また、「C:\test\debug.txt」が生成されます。ファイルの内容は上記と同じです。このようにC#では、デバッグメッセージをファイル出力できます。
デバッガでの変数表示
デバッガを使う際に、変数やプロパティを指定のフォーマットで表示する方法を紹介します。System.Diagnostics.DebuggerDisplay属性を付与すればよいです。実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
using System.Diagnostics; namespace ConsoleApplication1 { [DebuggerDisplay("name:{name}, age:{age}")] public class Person { public string name; // 名前 public int age; // 年齢 public Person(string name, int age) { this.name = name; this.age = age; } } public class Program { public static void Main(string[] args) { Person person = new Person("ichiro", 51); Debug.WriteLine(person); // ここにブレイクポイントを設定して実行する } } } |
Debug.WriteLine(person);の行にブレイクポイントを設定して実行してください。ブレイクポイントで止まった状態でpersonにマウスオンすると、「name:”ichiro”, age:51」と表示されることが分かります。
このようにC#では、System.Diagnostics.DebuggerDisplay属性を付与すると、デバッグ時に変数やプロパティを指定のフォーマットで表示できます。
処理時間の計測
C#で処理時間を計測する方法を紹介します。Stopwatchクラスを使用します。実際のソースコードを見てみましょう。ソースコード内の「#if DEBUG」~「#endif」はデバッグビルド時にのみ有効になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
using System; using System.Diagnostics; using System.Threading; namespace ConsoleApplication1 { public class program { public static void Main(string[] args) { #if DEBUG var sw = new Stopwatch(); // デバッグ出力 Debug.WriteLine("処理開始"); // 計測開始 sw.Start(); #endif // 何かの処理 Thread.Sleep(3000); #if DEBUG // 計測終了 sw.Stop(); // デバッグ出力 Debug.WriteLine("処理終了"); Debug.WriteLine("処理時間"); TimeSpan ts = sw.Elapsed; Debug.WriteLine($" {ts}"); Debug.WriteLine($" {ts.Hours}Hours {ts.Minutes}Minutes {ts.Seconds}Seconds {ts.Milliseconds}Milliseconds"); Debug.WriteLine($" {sw.ElapsedMilliseconds}Milliseconds"); #endif } } } |
デバッグビルドで実行すると、出力ウィンドウに以下が表示されます。デバッグ時に処理時間を計測したい場合に活用できます。「#if DEBUG」と「#endif」を削除すれば、Stopwatchクラスはリリースビルドでも使用できます。
Thread.Sleepは厳密ではないので、Millisecondsは実行環境によって変動します。
1 2 3 4 5 6 |
処理開始 処理終了 処理時間 00:00:03.0371836 0Hours 0Minutes 3Seconds 37Milliseconds 3037Milliseconds |
このようにC#では、Stopwatchクラスで処理時間を計測できます。
まとめ
いかがでしたでしょうか。C#でのデバッグ出力方法について説明しました。ここでは、基本的な使い方、デバッグメッセージのファイル出力、デバッガでの変数表示、処理時間の計測について紹介しました。
ぜひご自身でC#のソースコードを書いて、理解を深めてください。