0

アプリケーションのリリース バージョンがあります (インストールして実行するには、いくつかのバッチ ファイルが必要です)。ソースコードのコピーを持っています。(プログラムを理解するために)すべてのイベントのパスを確認するために、現在私が行っていることは、アプリケーションをインストールすると同時にソースコードを構築し、すべてのdllとpdbをコピーすることです(デバッガーができるようにコードにマップ) デバッグ フォルダーからプログラム ファイルに移動し、アプリを実行します。ソース コードに diagnostics.debugger.launch を配置したので、バージョンをデバッグできました。これを行っているのは、bin\debug からプロジェクトを直接実行してテストできないためです。プロジェクトにはいくつかの依存関係 (バッチ ファイルのパラメーター) があるため、リリースされたバージョンをインストールしています。コード内のすべてのイベント パスを見つける必要があります (この会社と .NET は初めてなので)。

4

1 に答える 1

0

SOへようこそ!より多くの情報が役立ちます。プログラムは何をしているのか、どのような問題を解決しようとしているのかなど...

実行パスを追跡する限り、必要なことを行う方法はたくさんあります。いくつかの提案:

  • 起動入力をログに記録し、同じ入力を使用して開発環境でプログラムをデバッグします。他の外部依存関係によっては機能しない場合があります。
  • すべてのメソッドへのエントリをファイルに記録します。これにより、実行パスが表示されます。これは昔ながらの方法を実装するのは非常に厄介ですが、PostSharp の無料バージョンの OnMethodBoundaryAspect のようなものを使用一度ログ記録コードを記述し、特定のメソッドで必要に応じて再利用することができます。
  • Gibraltarのようなインストルメンテーション プラットフォームを使用して、何が起こっているかをある程度可視化します。
  • Trace Listener を使用して、イベントの実行を追跡します。Trace.Listeners.Add() を見てください。リスナーを作成したら、Trace.Write または Trace.WriteLine を呼び出して、トレースに情報を追加できます。これには、多くの手動でトレース情報をメソッドに入力する必要がありますが、どうしてもやりたい場合は実行できます。私は PostSharp のようなアスペクト指向のソリューションを好みますが、何らかの理由でそのオプションがない場合があります。

簡単なサンプル: (繰り返しますが、このアプローチはお勧めしません...)

using System.Diagnostics;
using System.IO;

namespace TrackingExecutionPath
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            var myFile = File.Create(@"C:\Application.log");
            Trace.Listeners.Add(new TextWriterTraceListener(myFile));

            Trace.WriteLine("Starting up");
            var tracer = new Tracer();
            tracer.TraceMeOnce();
            Trace.WriteLine("Wrapping up");

            Trace.Flush();
        }

    }

    internal class Tracer
    {
        public void TraceMeAgain()
        {
            Trace.IndentLevel++;
            Trace.WriteLine("Entering TraceMeAgain");
            Trace.WriteLine("Doing some work.");
            Trace.WriteLine("Exiting TraceMeAgain");
            Trace.IndentLevel--;
        }

        public void TraceMeOnce()
        {
            Trace.IndentLevel++;
            Trace.WriteLine("Entering TraceMeOnce");
            Trace.WriteLine("Doing some work.");
            TraceMeAgain();
            Trace.WriteLine("Exiting TraceMeOnce");
            Trace.IndentLevel--;
        }
    }
}

出力例:

起動中
    TraceMeOnce に入る
    いくつかの作業を行っています。
        TraceMeAgain に入り
        ます。
        TraceMeAgain の
    終了 TraceMeOnceの終了
まとめ

于 2013-10-23T22:01:55.573 に答える