19

と を使用したより大きな (c#) WPF アプリケーションがn-classesありm-methodsます。すべてのメソッドにブレークポイントを配置したいので、アプリケーションでボタンを押すか、メソッドが呼び出されるたびに、VS2010 のアプリケーションがそのブレークポイントに到達するようにします。申請の流れ・進行状況を把握したい。

そして、私には多くの方法があるので、それらのすべてに手動でブレークポイントを配置したくありません。

VS2010 ソリューションのあらゆる場所にブレークポイントを配置するコマンドまたはツールはありますか?

編集: 次のアドインのようなものかもしれません: http://weblogs.asp.net/uruit/archive/2011/08/04/visual-studio-2010-addin-setting-a-class-breakpoint.aspx

edit2:いくつかの答えがありますが、どれも簡単な解決策のようには見えません。他に何か?

4

6 に答える 6

6

編集: C++ でのみテスト済み

クラス内のすべてのメソッドの先頭にブレークポイントを設定する方法を示すこの記事に出くわしました。VS 2010 でテストしました。基本的なプロセス (Visual C++ を使用する場合) は次のとおりです。

  1. [デバッグ] > [新しいブレークポイント] > [関数のブレークポイント] (Ctrl + B)に移動します。
  2. 関数フィールドに挿入します。MyClass::*
  3. これは [ブレークポイント] ウィンドウに 1 つのブレークポイントとして表示されますが、MyClassメソッドの1 つがヒットするとすぐに、のすべてMyClassの関数の先頭にブレークポイントが表示され、これらはすべて の「子」になります。 [ブレークポイント]ウィンドウの元のブレークポイント。

これはC#でも機能すると思います。

于 2013-08-28T06:38:24.900 に答える
4

この回答は、あなたが尋ねたとおりに機能するマクロを示唆していますが、私の個人的な推奨事項は、代わりにプロファイラーを使用することです-その場でプロファイリングを一時停止および再開できるもの(ほぼすべての商用プロファイラーが行います)、そして「ボタンをクリックする直前に「プロファイリングを開始」ボタン。プロファイラーで呼び出しツリーを表示することは、デバッガーでステップスルーするよりも、アプリケーションが実行していることを洞察するための非常に便利な方法であることがよくあります。

更新:この機能は、私が取り組んでいるOzCodeというVisualStudio拡張機能に存在します。OzCodeでは、クラス定義の横にあるアイコンをクリックすると、QuickActionが表示されます。

クラスのすべてのメンバーにブレークポイントを追加する

于 2013-02-09T19:42:49.473 に答える
1

単純なテキスト置換を使用してそれを行う簡単で汚い方法を次に示します。

  1. すべてのインデントが整列するように C# ファイルをフォーマットします。Edit> Advanced>でこれを行うことができますFormat Document
  2. テキストを開くCtrl+H
  3. 「検索するテキスト」フィールドをこれに設定します"^ {"
  4. 「置換」フィールドをこれに設定します" {System.Diagnostics.Debugger.Break();"
  5. ウィンドウの小さな「正規表現を使用」ボタンをクリックします
  6. 「すべて置換」をクリックするか、Alt+A
  7. ファイルに列挙型、クラス、または構造体がネストされたクラスがある場合、コンパイル エラーが発生します。コードがコンパイルされるまで、それらからデバッグ呼び出しを削除します。ネストされたクラスに独自のメソッドがある場合は、置換文字列にさらにタブを追加して、このプロセスを再度実行する必要があります。

仕組み: これは Visual Studio ドキュメント フォーマッタを使用し、ファイル内のすべてのメソッドが 2 つのタブと "{" で始まることを前提としています。したがって、2 つのタブと "{" で始まる行は、同じ 2 つのタブ、同​​じ "{"、およびデバッガーの呼び出しに置き換えられます。

ファイルにネストされた列挙型などがある場合、テキストの置換ではメソッドと列挙型が区別されないため、コンパイラ エラーが発生します。たとえば、次のように表示されます。

enum MyColors
{ System.Diagnostics.Debugger.Break(); //error here
    Red,
    Green,
    Blue,
}

これらのブレークポイントを無効にする機能が必要な場合、私が考えることができる最善の方法は単純な bool です。コードのどこかに、これを挿入します。

#if DEBUG
        private static bool _ignoreDebug = false;
#endif

(私は、#if DEBUGこのコードがデバッグ専用であることを示すフラグとしてそこに入れました。それは必要ありません) 次に、上記のステップ 4 で、代わりにこの置換文字列を使用します。

"        {if(!_ignoreDebug){System.Diagnostics.Debugger.Break();}"

次に、ブレークポイントにヒットし、それ以上ヒットしたくない場合は、ウォッチ ウィンドウに this と入力して enter を押します_ignoreDebug = true。オンに戻すには、_ignoreDebugブールにアクセスできる場所に手動ブレークポイントを挿入する必要があります。


コードからこれらすべてを削除するには、別のテキスト置換を行うか、編集をすべて元に戻します。

于 2016-02-25T15:12:00.560 に答える
0

次のようなツールを使用して「アスペクト」を作成すると思います:postsharp

アスペクト指向プログラミングを使用すると、すべてのメソッドの最初または最後にコードを追加できます (後処理ステップを介して)。したがって、次の行を追加するのは簡単です。

 System.Diagnostics.Debugger.Break()

すべてのメソッドに (実際にすべてのソースコードを編集することなく)。より一般的には、「メソッド DrawLine(x=30,y=80,z=12) に入る」、メソッドの最後に「メソッド DrawLine(x, y,z)". これにより、プログラムの流れを簡単にたどることができます

于 2013-02-08T09:06:53.183 に答える
-1

System.Diagnostics.Debugger.Break()メソッドへのエントリで使用できます。

スコープに設定した bool を使用して、おそらくこのようなものはありますか?

#if DEBUG
  if (BreakPointEveryMethod)
    System.Diagnostics.Debugger.Break();
#endif

これを確実に追加する簡単な方法もありますがnotepad++、単純なコマンドラインでこれを実現するための迅速で簡単な方法があるかどうかはわかりません.

于 2013-02-07T12:46:50.217 に答える