52855


c#において、if def相当のデバッグ用ロジックはどう書けば良いですか？


CC BY-SA 4.0
2019-02-18T13:30:31.000
52854
2019-02-18T13:42:31.307
32228
question
c#
c# でのデバッグの時のみ走るロジックの書き方


C言語と同様に`#if` `#else` `#endif`の[プリプロセッサ ディレクティブ](https://docs.microsoft.com/ja-
jp/dotnet/csharp/language-reference/preprocessor-directives/preprocessor-
if)が使えます。またデバッグビルドを行う際、`DEBUG`が定義されるよう構成されているため`#if DEBUG`と記述することができます。  
ただし、これは厳密には「デバッグの時のみ走る」でなく、デバッグビルドの場合は常に走ります。

一般にデバッグ時／非デバッグ時で処理を分けるべきではありません。しかし、適切に動作しているかのチェックコードを埋め込むことはよくあり、C#言語においても、[`Debug.Assert`メソッド](https://docs.microsoft.com/ja-
jp/dotnet/api/system.diagnostics.debug.assert?view=netframework-4.7.2)が用意されています。こちらもデバッグビルドの場合は常に走るチェックコードとなります。

厳密な意味で「デバッグの時のみ走る」ですと[Debugger.IsAttachedプロパティ](https://docs.microsoft.com/ja-
jp/dotnet/api/system.diagnostics.debugger.isattached?view=netframework-4.7.2#System_Diagnostics_Debugger_IsAttached)が用意されています。デバッグ中＝デバッガーに接続されている場合にのみこのプロパティは`true`を返しますので、`if`文で判定して必要なロジックを書くことができます。


CC BY-SA 4.0
2019-02-18T13:42:31.307
52855
2019-02-18T13:42:31.307
4236
52854
answer