2009-07-22 9 views
1

どのような関数が呼び出され、どのような順序でログに記録されるのかをデバッグしたいと思います。だから私はDebug.WriteLine( "myFunctionName(args)")を私の関数の上に置いて、最後にファイルに記録しています。これを行うより良いアプローチはありませんか?私はそう望むだろう。(.net)私のプログラムの関数ロジックを記録する

答えて

3

アスペクト指向プログラミングを見てください。

PostSharpを使用して、C#コードでAOPを実装できます。例えば。

public class TraceAttribute : OnMethodBoundaryAspect 
{ 
    public override void OnEntry(MethodExecutionEventArgs eventArgs) 
    { Trace.TraceInformation("Entering {0}.", eventArgs.Method); } 

    public override void OnExit(MethodExecutionEventArgs eventArgs) 
    { Trace.TraceInformation("Leaving {0}.", eventArgs.Method); } 
} 

今、あなたは「TraceAttribute」であなたの方法を飾ることができますし、メソッドが呼び出されたときの詳細をログに記録することができるようになります。

+0

いいですね。私はそれをダウンロードしています。他の簡単な方法はありませんか?私はこの種の機能を必要とする私のすべてのプロジェクトにこれを追加しなければならないということにちょっと残念です。フレームワーク自体に何も組み込まれていないのですか? –

+0

私はこれがフレームワークに組み込まれているようなことは認識していません。また、SteveMが指摘しているように、Policty Injection Applicationブロック(Microsoftが作成)を見ることもできます。 – SolutionYogi

1

StackTraceを使用すると、物事を見るために必要な場合は、StackTraceを使用します。

StackTrace stack = new StackTrace(true); 
string message = stack.ToString(); 

もちろん、これはすべてのものを追跡していないだろうが、私はそれが有用であることが分かってきました。

エンタープライズライブラリには、ポリシーインジェクションアプリケーションブロックというMicrosoftのコンポーネントもあります。このコンポーネントを使用すると、メソッドの入力と終了にもログを記録することができます。私はこのタイプのもののためのこれの素晴らしいデモを見た。開発者が に書かなければならない必要な作業と コードを最小化

Policy Injection Application Blockは、ロギング、 検証、承認、および 計装など アプリケーション内で一般的なタスクを実行

+0

ええ、トレースクラスはいいようです。それは問題を提起するようだ。 mainからメソッドABC()を呼び出すと、スタックトレースをチェックすると、ABCへの呼び出しを完全に無視したツリーのように、mainメソッドまで呼び出されたメソッドだけが報告されます。 ) 関数。これについての回避策はありますか? –

+0

StackTraceだけで問題があります。それはいくつかの分野では有用かもしれませんが、すべてではありません。ポリシー注入アプリケーションブロックは、すべてのメソッドにコードを追加するのではなく、単に外部構成を使用し、必要なDLLだけを使用してメソッドの先頭および/または末尾にコードを挿入するため、この問題を解決します。 – SteveM

0

あなたのコードで何か侵略的なことを望まないなら、プロファイリング/トレースの道を進む必要があります。一部のプロファイラーは、メソッドの呼び出し、スタック、およびアプリケーションライフタイム全体で実行される実行の完全な概要を提供します。

0

免責事項:私はこのソリューションの開発者です。

同様のPostSharpのIL製織と同様に、アプリケーションのバイナリに直接使用状況のトラッキングを導入できるようにする市販のソリューションもあります。製品はPreEmptive Solutionsのランタイムインテリジェンスであり、コードインジェクションツールとしてDotfuscatorを使用して.NETアプリケーションにアプリケーション使用状況追跡機能を追加しています。

コンパイルされたアセンブリに直接新しいコードを挿入することで動作するため、Dotfuscatorのユーザーインターフェイスを使用して、コードにカスタム属性を追加する必要がないように、使用方法を追跡するメソッドを選択できます必要に応じてカスタム属性を設定することもできます)。これは一般的なロギングではありません。すべての使用データがHTTPを介して中央データ収集サーバー(デフォルトではPreEmptiveでホストされています)に送信されるためですが、追加の価値はアプリケーションの使用状況に関する膨大な分析とレポートを提供することです。また、独自のエンドポイントを実装して使用量データを受け取ることもできますが、サンプルをまだリリースしていません。

現在、Dotfuscator Software Services - Community EditionのVisual Studio 2010(現在ベータ版1)で無料で提供されています。さらに、VS 2010リリースと連動する無料のデータ収集とレポートポータルを提供しているため、アプリケーションに匿名で無料で使用状況の追跡を追加することができます。

私は、この解決策を詳しく述べた一連のブログ投稿を開始しました:What is Runtime IntelligenceCorrelating Download to Usage With Visual Studio 2010です。 Visual Studio 2010に含まれるすべての機能の概要を確認するには、What's New With Dotfuscator In Visual Studio 2010

を参照してください。機能性。

関連する問題