ボタンの押下、タイマーなど、多数のイベントがあるWindowsフォームアプリケーションをデバッグしようとしています。
ブレークポイントを設定せずに、アプリケーションによって実行されているコードのすべての行をキャッチする方法はありますか?
編集:プログラムは私が書いたものではないので、私はコードに慣れていません。プログラム全体をステップスルーして、実行されているコードのすべての行をキャッチしたいと思います。さまざまなコントロールが動的に作成されるため、すべてのイベントでブレークポイントを設定することは実用的ではありません。
ブレークポイントを設定せずにボタンクリックをデバッグするには:
注:これは、ペイント、マウスイベント、またはその他のイベントが処理されている場合は機能しません。上記の手順を実行しようとすると、デバッガーはそれらのハンドラーにドロップします。
Visual Studio 2010のUltimateエディションを使用している場合は、 IntelliTrace (以前のHistorical Debugger)と呼ばれる新機能を使用できます。これにより、必要なことを正確に実行できます。プログラムの実行中に発生したすべてのメソッド呼び出しとイベントを確認でき、必要なイベントに戻ることができます。
IntelliTraceを有効にするには、Tools → Options → IntelliTrace
に移動し、[IntelliTraceを有効にする]チェックボックスをオンにして、[イベントのみ]または[イベントと通話情報]の2つのモードのいずれかを選択し、デバッガーでアプリケーションを実行します(F5) 。
2つのモードの違いは、後者はプロファイラーを使用してallランタイム情報を収集するため、完全な呼び出しスタックを取得しますが、取得しないことです。デバッガーの編集および続行機能を使用できる。
詳細については、この 一連の記事 、そしてもちろん、MSDNを参照してください。
私は ランタイムフロー ツールを開発して、この問題を正確に解決しました-リアルタイムの関数呼び出し監視を介して、見慣れない大規模な.NETコードベースを理解しました。 IntelliTraceに似ていますが、デバッグよりも制御フローに重点が置かれています。
なぜあなたはすべての行で壊れたいのですか?これは非常に面倒で時間がかかります。プログラムの実行中のアクティビティを確認する場合は、ログメカニズムまたはDebug.Writeline
を使用して、情報をイミディエイトウィンドウに出力します。
コードの行をトレースすることはできませんが、何が実行されたかを知りたい場合はTrace.TraceInformation
呼び出しを使用できます。 Debug.Write
もあります。どちらの出力も、VisualStudioの出力ウィンドウに書き込まれます。
別の解決策は、たとえばlog4netを使用してアプリケーションにログを追加することですが、それはニーズに対してやり過ぎかもしれません。
これはまさにあなたが求めているものではありませんが、知らなかった場合は、既存のブレークポイントのオンとオフを切り替えることができます。あなたの場合、コード全体の重要な場所にブレークポイントを追加し、デバッグしたくないときにそれらを無効にすることができます。そうすれば、後でそれらを再度使用するときに、それらを再度有効にすることができます。
有効化/無効化は、[デバッグ]> [ウィンドウ]> [ブレークポイント]メニュー(CTRL + D、B)の下にある[ブレークポイント]ウィンドウから利用できます。ウィンドウに「関数」列と「ファイル」列を含めることもできます。これは、関心のあるイベントハンドラーにあるブレークポイントを特定するのに役立つ場合があります。
実際にはそうではありませんが、コードの残りの部分で1つのブレークポイントとシングルステップ(F10/F11)を設定できます。
いいえ、恐れることはありません。各ブレークポイントを自分で設定する必要があります。
F9がブレークポイントを割り当てるためのショートカットキーであることが役立つ場合は、各メソッドの開始時にブレークポイントを設定し、そこからステップスルー(F10)/ステップイン(F11)を使用します。