Visual Studio 2012 からデバッグ モードでアプリケーションを実行しています。
どのコードがリアルタイムで実行されるかを確認したいと思います。これは、実行するのと同じです。
Console.WriteLine(" command.do ... etc. ");
一行ごとに
どのコードが実行されるかをリアルタイムで確認することはできますか?
Visual Studio 2012 からデバッグ モードでアプリケーションを実行しています。
どのコードがリアルタイムで実行されるかを確認したいと思います。これは、実行するのと同じです。
Console.WriteLine(" command.do ... etc. ");
一行ごとに
どのコードが実行されるかをリアルタイムで確認することはできますか?
はいといいえ。
はい、技術的には実現可能です。
いいえ、それを行うためのツールは見つかりません (もちろん、存在しないものについて 100% 確実なことは言えません)。
これは、.NET フレームワークによって提供されるプロファイリング API を使用して行うことができます。一部のプロファイラーは、行ごとのトレースを宣伝していますが、これは、パフォーマンス ヒットを下げるためにいくつかのショートカットを使用する代わりに、すべての行でタイミングを測定することを意味するだけです。
ただし、最短の道を無理やり進むのではなく、最終的に達成したいことを説明するようにしてください。
JetBrains のようなツールを検討することをお勧めします。10 日間の無料試用版があり、Visual Studio に非常にうまく統合されています。
http://www.jetbrains.com/profiler/
これは、あなたが求めていることを正確に行うものではありません。しかし、私はこれ以上良いものを思いつきません。
リアルタイムでデバッグする場合、プログラムを遅らせるべきではありません。これは、安価ではないロジック アナライザーなどの外部ハードウェアを使用して実行できます。
すべての行の実行をトレースする代わりに、いくつかの重要な行の実行をトレースする方がよいでしょう。そのトレースは非常に高速でなければなりません。Visual Studio のトレースは遅すぎて、Trace を呼び出す 2 番目のスレッドをブロックします。これは、リアルタイム デバッグでは大きな問題です。
幸いなことに、独自のメモリ トレースを簡単に作成できます。これは、マイクロ秒の遅延のみを引き起こし、非ブロッキングです。
const int maxMessages = 0x100;
const int indexMask = maxMessages-1;
string[] messages = new string[maxMessages];
int messagesIndex = -1;
public void Trace(string message) {
int thisIndex = Interlocked.Increment(ref messagesIndex) & indexMask;
messages[thisIndex] = message;
}
スレッドとタイミングの情報も収集し、トレースを適切に出力するこのアプローチの詳細については、CodeProject: Debugging multithreaded code in real time 1を参照してください。