どのような関数が呼び出され、どのような順序でログに記録されるのかをデバッグしたいと思います。だから私はDebug.WriteLine( "myFunctionName(args)")を私の関数の上に置いて、最後にファイルに記録しています。これを行うより良いアプローチはありませんか?私はそう望むだろう。(.net)私のプログラムの関数ロジックを記録する
答えて
アスペクト指向プログラミングを見てください。
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」であなたの方法を飾ることができますし、メソッドが呼び出されたときの詳細をログに記録することができるようになります。
StackTraceを使用すると、物事を見るために必要な場合は、StackTraceを使用します。
StackTrace stack = new StackTrace(true);
string message = stack.ToString();
もちろん、これはすべてのものを追跡していないだろうが、私はそれが有用であることが分かってきました。
エンタープライズライブラリには、ポリシーインジェクションアプリケーションブロックというMicrosoftのコンポーネントもあります。このコンポーネントを使用すると、メソッドの入力と終了にもログを記録することができます。私はこのタイプのもののためのこれの素晴らしいデモを見た。開発者が に書かなければならない必要な作業と コードを最小化
Policy Injection Application Blockは、ロギング、 検証、承認、および 計装など アプリケーション内で一般的なタスクを実行
ええ、トレースクラスはいいようです。それは問題を提起するようだ。 mainからメソッドABC()を呼び出すと、スタックトレースをチェックすると、ABCへの呼び出しを完全に無視したツリーのように、mainメソッドまで呼び出されたメソッドだけが報告されます。 ) 関数。これについての回避策はありますか? –
StackTraceだけで問題があります。それはいくつかの分野では有用かもしれませんが、すべてではありません。ポリシー注入アプリケーションブロックは、すべてのメソッドにコードを追加するのではなく、単に外部構成を使用し、必要なDLLだけを使用してメソッドの先頭および/または末尾にコードを挿入するため、この問題を解決します。 – SteveM
あなたのコードで何か侵略的なことを望まないなら、プロファイリング/トレースの道を進む必要があります。一部のプロファイラーは、メソッドの呼び出し、スタック、およびアプリケーションライフタイム全体で実行される実行の完全な概要を提供します。
免責事項:私はこのソリューションの開発者です。
同様のPostSharpのIL製織と同様に、アプリケーションのバイナリに直接使用状況のトラッキングを導入できるようにする市販のソリューションもあります。製品はPreEmptive Solutionsのランタイムインテリジェンスであり、コードインジェクションツールとしてDotfuscatorを使用して.NETアプリケーションにアプリケーション使用状況追跡機能を追加しています。
コンパイルされたアセンブリに直接新しいコードを挿入することで動作するため、Dotfuscatorのユーザーインターフェイスを使用して、コードにカスタム属性を追加する必要がないように、使用方法を追跡するメソッドを選択できます必要に応じてカスタム属性を設定することもできます)。これは一般的なロギングではありません。すべての使用データがHTTPを介して中央データ収集サーバー(デフォルトではPreEmptiveでホストされています)に送信されるためですが、追加の価値はアプリケーションの使用状況に関する膨大な分析とレポートを提供することです。また、独自のエンドポイントを実装して使用量データを受け取ることもできますが、サンプルをまだリリースしていません。
現在、Dotfuscator Software Services - Community EditionのVisual Studio 2010(現在ベータ版1)で無料で提供されています。さらに、VS 2010リリースと連動する無料のデータ収集とレポートポータルを提供しているため、アプリケーションに匿名で無料で使用状況の追跡を追加することができます。
私は、この解決策を詳しく述べた一連のブログ投稿を開始しました:What is Runtime IntelligenceとCorrelating Download to Usage With Visual Studio 2010です。 Visual Studio 2010に含まれるすべての機能の概要を確認するには、What's New With Dotfuscator In Visual Studio 2010
を参照してください。機能性。
- 1. MATLABプログラムで使用される関数名をログに記録
- 2. 音声記録プログラム
- 3. .NETプログラムの転記方法
- 4. PythonでのATMプログラムのトランザクション記録
- 5. 私のアプリケーション画面のビデオをアンドロイドでプログラム的に記録する方法
- 6. Xamarinの登録ロジック
- 7. 変数の値を記録
- 8. WindowsのプログラムのDeviceIoControl呼び出しを記録する方法
- 9. .netアプリケーションでイベントを記録するためのサポート
- 10. ステートレス(.NETステートマシンライブラリ)の状態遷移を記録する方法
- 11. .NETでアプリケーションのスタックトレース全体をログに記録する方法
- 12. 関数を作成し、これは私の関数を作成している2記録
- 13. プログラムでElmahでエラーをログに記録する:特定の情報をログに記録する
- 14. .NETプログラムの関数実行時間をプロファイリングするツール
- 15. プログラムの実行中にメソッド呼び出しを記録する
- 16. Javaでのロジックの表記
- 17. このプログラムを実行しているときのガベージデータ(生徒記録プログラム)
- 18. 登録ユーザー:ロジックのワークフロー
- 19. C#.net Windowsサービス - ファイルにTCPポートアクティビティを記録する方法
- 20. 構造体と関数をC言語で記述するプログラム
- 21. C#プログラムの実行パスを記録していますか?
- 22. JS関数。時間間隔でメッセージを記録します
- 23. コンソールにすべての関数呼び出しを記録する
- 24. モジュラ関数の背後にあるロジック
- 25. コールバック関数の出力がログに記録されない(JavaScript)
- 26. オンラインラジオはどのように.NETに記録できますか?
- 27. .Netフレームワークを使用してWindows共有(SMB共有)へのアクセスをプログラムでログに記録できますか?
- 28. 小数点の記号プログラム
- 29. PHPで組み込み関数の使用法を記録するには?
- 30. Vimスクリプト関数からVimマクロ記録モードを検出でき、Vimマクロ記録モードでこの関数を呼び出せますか?
いいですね。私はそれをダウンロードしています。他の簡単な方法はありませんか?私はこの種の機能を必要とする私のすべてのプロジェクトにこれを追加しなければならないということにちょっと残念です。フレームワーク自体に何も組み込まれていないのですか? –
私はこれがフレームワークに組み込まれているようなことは認識していません。また、SteveMが指摘しているように、Policty Injection Applicationブロック(Microsoftが作成)を見ることもできます。 – SolutionYogi