1

タイトルが少し野心的であることは知っていますが、C#プログラムをデバッグするときにコールスタックウィンドウ(Visual Studio 2010)に以前の状態を表示した後、再起動する方法があるかどうか疑問に思っています([続行]を押すときなど)/ F5)そこから。

これは、外部に移動する方法がないため、例外を生成するラムダ式をデバッグする場合に特に役立ちます。

実際のOOコードタイムマシンの場合、すべてのオブジェクトの履歴状態をメモリに保存する必要があるため、この段階で実行可能かどうかは疑問です。これで、すべてのオブジェクトの状態があまり変化していない場合は、現在の状態を維持して時間を遡ることができます(「編集して続行」で同じことを行うためのショートカットとして)。

4

2 に答える 2

3

場合によっては、スタックフレームを右クリックして、[ここまでアンワインド](または非常によく似た表現)を選択できます。それは常に可能であるとは限らず、必要な条件が何であるかはわかりませんが、何がそれを妨げる可能性があるかについて推測します。

  • 中央のコールスタック上のネイティブコードフレーム
  • StackOverflowExceptionで停止されている(明らかに、いずれの場合もプロセスの停止)
  • たぶんラムダ式またはEdit-and-Continueが機能するのを妨げる他のもの(?)

基本的に、「異常な」ものは何でも。

それ以外は、うまくいけば、そこに行きます!

于 2011-06-17T01:01:45.467 に答える
0

これは少し厄介ですが:

コールスタックウィンドウで前の状態を表示しているときに、逆アセンブリウィンドウを開きます([デバッグ]、[ウィンドウ]、[逆アセンブリ]、または[CTRL + ALT + D])。これで、その場所に戻ったときに実行を停止するブレークポイントを作成できるはずです。

他に何が実行されるかを気にしない場合は、F5キーを押して、コードが新しいブレークポイントに戻るのを許可します。

次に、再開するステートメントを右クリックして、[次のステートメントの設定]を選択します。F5を押して、そこから再開します。

新しいブレークポイントに戻る途中で他に何が実行されるかを気にする場合は、Set Next Statementを使用して、プログラムカウンターを現在の関数の最後に設定し、Shift +F11を使用してその関数からステップアウトできます(したがって、その関数の残りのロジックのいずれかを実行します)。新しいブレークポイントに戻るまで、必要に応じて繰り返します。

SetNextStatementの使用に関するさまざまな悲惨な警告に注意してください

編集6/18上記をテストしたとき、私はVisual Studio2010Ultimateを実行していました。Visual Studio Express C#を確認しましたが、逆アセンブリデバッグウィンドウをサポートしていません。可能であれば、Visual Studio 2010 Professionalを確認して、この回答を再度更新します。Visual Studio Ultimateを使用している場合は、@HansによるIntellitraceの提案の方が適している可能性があります。

于 2011-06-17T01:22:34.333 に答える