web-dev-qa-db-ja.com

.NET BCLでのトレースとデバッグ

のようです

Debugの使用法がリリース構成でコンパイルされるという注目すべき例外を除いて、ほとんど同じです。

どちらを使用し、もう一方を使用しないのですか?これまでに私が掘り下げた唯一の答えは、Debugクラスを使用して、デバッグ構成でのみ表示される出力を生成し、Traceはリリース構成のままですが、私の頭の中の質問には答えられません。

Traceは再コンパイルせずにオフにできるため、コードをインストルメントする場合、なぜDebugを使用するのでしょうか。 ?

57
Ben Collins

主な違いは、指定したものです。デバッグにはリリースに含まれませんが、トレースには含まれます。

私が理解しているように、意図された違いは、開発チームがDebugを使用して、製品の消費者にとって詳細すぎる(または明らかになる)と判明する可能性のあるリッチで説明的なメッセージを出力する可能性がある一方で、Traceは、より具体的にはアプリケーションのインスツルメンテーションに向けられたメッセージ。

あなたの最後の質問に答えるために、私がデバッグを使用して、私がリリースするつもりだったコードの一部を計測する理由を考えることはできません。

お役に立てれば。

59
Jared

デバッグは、純粋なデバッグ目的で使用されます。デバッグ実行(デバッグモード)でリッチメッセージを発行します。

トレースは、アプリケーションのデバッグ、バグ修正、およびプロファイリング(リリース後)に役立ちます。

Debugクラスは、リリースモードでは使用されません。

5
Raj

トレースとデバッグの唯一の違いは、リリースビルドにコンパイルされるときに、トレースステートメントがプログラムにデフォルトで含まれるのに対し、デバッグステートメントは含まれないことです。

したがって、デバッグクラスは主に開発フェーズでのデバッグに使用されますが、トレースは、アプリケーションのコンパイルおよびリリース後にテストおよび最適化に使用できます。

4
sandy101

Log4netの機能ははるかに柔軟で堅牢であるため、トレースにlog4netを使用することを検討します。

しかし、私や内部テスター以外の誰かが見るつもりのない真のデバッグメッセージについては、おそらくデバッグを使用します。

2
Michael Burr

パフォーマンスに敏感なコードブロックの場合、Traceをコンパイル済みのままにして無効にすると、パフォーマンスに違いが生じる可能性があります。

2
Kevin Dente

あなたはあなた自身の質問に答えました。デバッグメッセージが残っている場合、人々はそれらを見ることができます。たとえば、次のようにするとします。

 Debug.WriteLine( "ユーザー名でDBに接続しています:blahとPW:pass"); 

コードを逆コンパイルした人なら誰でもそれを見ることができます。しかし、それはテスト中に知っておくべき非常に重要なことかもしれません。

トレースが違います。トレースを行う場合は、おそらくlog4netを使用します。

1
Cory Foy

これは、トレースとデバッグの完全な違いです。デバッグとトレースはどちらもSystem.Diagnostics名前空間を使用します。

デバッグ

  • Debugクラスを使用します。
  • デバッグビルドで使用します。
  • アプリケーション開発の時間を利用します。
  • デバッグモードでは、コンパイラは実行可能ファイル内にデバッグコードを挿入します。
  • デバッグクラスはデバッグモードでのみ機能します。
  • デバッグを使用してパフォーマンス分析を行うことはできません。
  • デバッグは、プログラムのエラーを見つけるために使用します。
  • Debugの場合、Debug.Write()メソッドを使用できます。
  • デバッグは、メインプログラムの実行と同じスレッドで実行されます。

痕跡

  • Traceクラスを使用します。
  • Traceステートメントには、リリースされたビルドにコンパイルされたプログラムがデフォルトで含まれます。
  • トレースクラスは、アプリケーションがコンパイルおよびリリースされた後でも、テストと最適化に使用されます。
  • トレースクラスは、デバッグモードとリリースモードの両方で機能します。
  • トレースは、メインプログラム実行スレッドとは異なるスレッドで実行されます。
  • Traceでは、Trace.Write()メソッドを使用できます。
  • アプリケーションのデプロイにかかる時間を使用します。

参照: csharp corner

1
Navid_pdp11