.NET BCLでのトレースとデバッグ
-
05-07-2019 - |
質問
どうやら
ほとんど同じですが、デバッグの使用がリリース構成でコンパイルされるという顕著な例外があります。
一方を使用して他方を使用しない場合これまでに掘り下げた唯一の答えは、デバッグクラスを使用して、デバッグ構成でのみ表示される出力を生成し、トレースはリリース構成ですが、それは私の頭の中の質問には本当に答えていません。
コードをインストルメントする場合、トレースは再コンパイルせずにオフにできるので、なぜデバッグを使用するのでしょうか?
解決
主な違いは、「デバッグはリリースに含まれていませんが、トレースは含まれています。」
意図した違いは、私が理解しているように、開発チームはデバッグを使用して、製品の消費者に対して詳細すぎる(または明らかになっている)ことを証明する豊富で説明的なメッセージを出力する一方で、トレースはより具体的にはアプリケーションのインスツルメントを対象とする種類のメッセージ。
最後の質問に答えるために、デバッグを使用してリリースする予定のコードを計測する理由を考えることはできません。
これがお役に立てば幸いです。
他のヒント
デバッグは、純粋なデバッグ目的に使用されます。デバッグ実行で豊富なメッセージを出力します(デバッグモード)。
トレースは、アプリケーションのデバッグ、バグ修正、およびプロファイリング(リリース後)に役立ちます。
Debugクラスはリリースモードでは使用できません。
トレースとデバッグの唯一の違いは、リリースビルドにコンパイルされるときにデフォルトでトレースステートメントがプログラムに含まれるのに対し、デバッグステートメントは含まれないことです。
したがって、デバッグクラスは主に開発フェーズでのデバッグに使用され、トレースはアプリケーションのコンパイルとリリース後のテストと最適化に使用できます。
パフォーマンスに敏感なコードブロックの場合、トレースをコンパイル済みのままにして無効にすると、パフォーマンスに違いが生じる可能性があります。
log4netの機能ははるかに柔軟で堅牢なので、トレースにlog4netを使用することを検討します。
しかし、私や内部のテスター以外には見たくない真のデバッグメッセージについては、おそらくデバッグに固執するでしょう。
あなたはあなた自身の質問に答えました。デバッグメッセージが残っている場合、人々はそれらを見ることができます。たとえば、次のようにするとします:
Debug.WriteLine("Connecting to DB with username: blah and PW: pass");
コードを逆コンパイルする人は誰でもそれを見ることができます。しかし、それはテスト中に知ることが非常に重要なことです。
トレースは異なります。 Traceを実行する場合は、log4netを使用するだけです。
これは、トレースとデバッグの完全な違いです。 デバッグとトレースの両方がSystem.Diagnostics名前空間を使用します。
デバッグ
- Debugクラスを使用します。
- デバッグビルドで使用します。
- アプリケーション開発の時間を使用します。
- デバッグモードのコンパイラは、実行可能ファイル内にデバッグコードを挿入します。
- デバッグクラスはデバッグモードでのみ動作します。
- デバッグを使用してパフォーマンス分析を行うことはできません。
- デバッグは、プログラム内のエラーを見つけるために使用します。
- デバッグには、Debug.Write()メソッドを使用できます。
- デバッグは、メインプログラムの実行と同じスレッドで実行されます。
トレース
- Traceクラスを使用します。
- Traceステートメントには、プログラムがリリースビルドにコンパイルされたときにデフォルトで含まれます。
- Traceクラスは、アプリケーションがコンパイルおよびリリースされた後でも、テストと最適化に使用されます。
- トレースクラスは、デバッグモードとリリースモードの両方で機能します。
- トレースは、メインプログラム実行スレッドとは異なるスレッドで実行されます。
- トレースには、Trace.Write()メソッドを使用できます。
- アプリケーションの展開時間を使用します。
reference: csharpコーナー