2009-09-02 12 views
25

私はaspxページの特定の要素をクリックすると発生するバグを追跡しようとしています...Visual Studioで実行される次のコード行を中断する方法はありますか?

これまで、私はその特定のイベントを処理するクラスを追跡し、私はヒットする必要があると思うライン上のブレークポイント。私は最終的に正しいクラスを見つける前に、いくつかの試行が必要です....特にクラスがどこかに埋め込まれたユーザコントロールである場合は...

Visual Studioを壊す方法があるかどうか疑問に思っていますaspxページの要素(ボタンなど)をクリックすると、次のコード行が実行されます。スローされた例外を破る方法があることを知っているので、私に助けになるかもしれない何か類似点があるかもしれないと思っています。

機能のこの種が可能でない場合は、おそらく誰かが私はすぐに私はデバッグしたいクラスを見つけるための良い方法を提案することができ...

+0

この「バグ」はどうやって明らかになりますか?そこにブレークポイントを設定できませんか?または、そこにブレークポイントを設定するためにそのボタンをクリックした後に実行される他のコードを知っていますか?その場合は、スタックウィンドウを見てください。それは呼び出されたイベントハンドラを表示するはずです。その後、そこにブレークポイントを置くことができます。 – sbi

+0

@sbiバグをクリックすると、詳細情報が表示され、必要以上に多くのデータが表示されるようになります。私は、表示されているデータにフィルタリングを追加する方法を見つけることを試みていました。最終的に私はあまり名がつけられていないメソッドを見つけることができました。これは、データグリッド項目にアクセスしたときの代理メソッドでした。私はまだそれが見つけやすいと思っています... – mezoid

+0

@Kyralessaどのような驚くほど役に立たないコメントです。おそらく、私を侮辱するよりも、あなたの答えを再考するより良い方法を見つけることができます... – mezoid

答えて

27

デバッグ>すべてブレーク(「一時停止」)ボタンを試しましたか? (はCtrl + ブレイク

Debug > Break All

あなたはその後、ステップイン場合には、通常のWinFormsアプリでメインフォームを表示()のように、スタック上かなり低いどこか壊れ、しかしますそれを過ぎるためには、このようなことでしばしばうまくいくでしょう。

+1

私はコードがミリ秒以内に実行されると思いますので、私のクリックを画面上に表示すると、私はそれを十分に速く中断することはできません。 – mezoid

+2

私は繰り返します:*試しましたか?ボタンをクリックした後は、[すべてブレーク]をクリックしないでください。 [すべてブレーク] *をクリックしてボタンをクリックし、[ステップイン]をクリックして*ボタンをクリックします。 –

+0

さて、私はもう一度試してみた...それは動作しませんでした。おそらく私はaspxページをデバッグしているからです。一時停止してウィンドウ上の何かをクリックすると、ページをロードしようとしていますが、何も起こりません。実行してから一時停止してからブレークしてから遅くなります。私はあなたの提案をWinFormsやConsoleアプリケーションのようなものを試してみて、それがどうなるかを見なければならないでしょう...それがうまくいくなら私はあなたの答えを答えとしてマークします...しかし、 tはうまくいくようです... – mezoid

4

あなたはStep Into (F11)Step Over (F10)をお探しですか?

- あなたはCall Stackウィンドウについてもを知っています

を編集しますか?あなたの場所を特定し、何が起こっているかを知るのに役立ちます。

+0

申し訳ありませんが、私はF11、F10、コールスタックウィンドウについて認識しています。私はaspxページのアクションをトリガーした後にコードベースにヒットしたら、私が休憩できるようなものを探しています。 – mezoid

+0

mezoid:コードの特定の部分に 'System.Diagnostics.Debugger.Break();'と書いておきたいのですか?ブレークポイントを明示的に設定しているにもかかわらず、デバッガが強制的にブレークします。 –

+0

私は休憩を入れなければならないクラスがどこにあるのかわからないことを... ...( – mezoid

0

デバッグ - > CLR例外のためにスローされた例外

チェック。

EDIT

オッズは、あなたがCLR例外を持っているです。このメソッドを使用すると、例外が発生したときにデバッガが常にブレークします。これは、スタックトレースを読み取る場合に比べて非常に便利です。

+0

それは良いですが、私の場合は、私が探しているバグは例外によって引き起こされたものではありません – mezoid

2

Conditional Breakpointsがあなたの答えかもしれません。あなたのコードが壊れていると思っていて、条件が満たされたときにだけ停止すると思うように設定することができます。

+0

trueですが、私が探しているコードを見つけるためにブレークポイントを一括して設定する必要がない方法を見つけたいと思っています – mezoid

0

いくつかのアイデア:

  • あなたのイベントハンドラの一貫性のある命名規則を使用する場合、それらすべてのためのグローバルな検索を行うには些細なことと、ブレークポイントを追加する必要があります。最初のヒットでマクロをすばやく記録してから、マクロを再生することで、何度も操作を繰り返すことができます。少しの練習で、すべてのハンドラを数秒で中断することができます。

  • イベントに追加のイベントハンドラを追加します(たとえば、コンストラクタなどでイベントハンドラを追加すると、アプリケーションが追加するすべてのイベントハンドラの前に追加されます)。ブレークポイントにヒットしたら、イベントの他のイベントハンドラを一歩進んで行くことができます。

  • クリックを処理し、単純に新しいイベントを生成するカスタムイベントハンドラを作成します。他のすべてのイベントハンドラをこのセカンダリイベントに接続します。次に、最初のハンドラをブレークポイントし、呼び出すセカンダリハンドラを実行します。