2013-02-07 34 views
16

n-classesとという大きな(c#)WPFアプリケーションがあります。すべての単一メソッドにブレークポイントを配置したいので、アプリケーションのボタンを押すたびに、またはメソッドが呼び出されるたびに、VS2010のアプリケーションがそのブレークポイントにヒットするようにします。私はアプリケーションの流れ/進捗状況を理解したい。VS2010のすべてのメソッドにブレークポイントを設定するには

私はたくさんの方法を持っているので、手動でブレークポイントごとに手動で配置するのではないでしょう。

私のVS2010ソリューションのどこにブレークポイントを配置するためのコマンドやツールはありますか?

編集:以下のアドインのような多分何か:http://weblogs.asp.net/uruit/archive/2011/08/04/visual-studio-2010-addin-setting-a-class-breakpoint.aspx

EDIT2は:いくつかの答えがありますが、それらのどれもまっすぐ進む簡単な解決策のように思えるん。他に何か?

+0

[クラス内のすべてのメソッドの開始時にブレークポイントを設定するVisual Studioマクロはありますか?](http://stackoverflow.com/questions/4396613/is-there-a-visual-studio -macro-to-the-every-of-methodを設定する) – Sjoerd

+2

これは非常識なアイデアですが、非常に便利です! –

+2

多くのブレークポイントをワンステップで設定できます。http://www.codeproject.com/Articles/139120/Tips-Set-Breakpoint-to-multiple-Functions-at-the-sただし、設定していません_every_メソッドのブレークポイント。これは[デバッグを遅くする](http://stackoverflow.com/questions/589338/slow-debugging-issue-in-visual-studio)が非常に大きいことに注意してください。 –

答えて

-1

メソッドへの入力にSystem.Diagnostics.Debugger.Break()を使用できます。

これはおそらくスコープで設定したブールと同じですか?

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

ありすぎnotepad++に確かにこれを追加し、迅速な方法であることが、私はあなたが単純なコマンドラインを介してこれを達成するための迅速かつ簡単な方法があることを確認していないだろう。私はあなたのようなツールを使用して、それのための「側面」を作成すると思います

0

postsharp

アスペクト指向プログラミングでは、(後処理工程を経て)すべてのメソッドの開始または終了にコードを追加することができます。したがって、実際にすべてのソースコードを編集することなく、すべてのメソッドに

System.Diagnostics.Debugger.Break() 

の行を追加するのは簡単です。 より一般的には、「メソッドDrawLine(x = 30、y = 80、z = 12)を入力する」のように、メソッドの最後にログ・ステートメントをすべてのメソッドの先頭に追加するために使用されます。 、y、z)」である。

+0

興味深いです。私はそれを徹底的に調べます。 – Gero

4

This answer私はあなたの質問に応じてマクロを提案しますが、私の個人的な提案は、プロファイラを代わりに使用することです(ほぼすべてのプロファイリングを一時停止して再開できます)。ボタンをクリックする直前に "プロファイリング開始"ボタンを押してください。プロファイラでのコールツリーの表示は、アプリケーションが何をしているのかを把握するのに非常に便利な方法です。デバッガをステップ実行するよりもはるかに簡単です。

更新:この機能は、私が作業しているVisual Studio拡張機能のOzCodeにあります。 OzCodeを使用すると、次のクラス定義のアイコンをクリックすると、あなたはQuickActionが表示されます:

Add Breakpoint to every member in class

+0

あなたが提案できるプロファイラはありますか? – Salim

+0

@サリム多くのものがありますが、JetBrains dotTraceとRed Gate ANTSがいくつかの例です。私が記述したテクニックは、プロファイラーのサンプリングモードではなく、計装モード(各メソッドエントリーが記録される)でのみ機能することに注意してください。プロファイラーのサンプリングモードは、非常に短時間しか実行されない場合、 –

5

EDIT:のみC++

でテスト私は方法を示していthis articleに出くわしましたクラス内のすべてのメソッドの先頭にブレークポイントを設定します。私はVS 2010でそれをテストしました。(Visual C++を使用して)基本的なプロセスは、次のとおりです。デバッグ>機能ます(Ctrl + B)で、新規ブレークポイント]> [ブレークポイントに

  1. 移動します。これはブレークポイントウィンドウ内の単一のブレークポイントとして表示されますMyClass::*
  2. 機能フィールドで
  3. 、挿入、しかし、すぐにヒットさMyClassの方法の一つとして、あなたはブレークポイントが表示されますMyClassのすべての機能の開始点であり、これらのすべては、ブレークポイントウィンドウの元のブレークポイントの「子」になります。

私はこれもC#で動作すると考えています。ここで

+0

リンクありがとうございましたが、私はC#クラスで同じ効果を再現することができませんでした。ブレークポイントはありません。 2つの方法で小規模なクラスを作って、これもC#で動作するかどうか確認してください。 – Gero

+4

検索した後、私は[この回答](http://stackoverflow.com/a/15028569/504611)を見つけました。そのコメントの1つは、このメソッドはC++でしか動作しないと言います。誤解を招くような答えに対する謝罪。 –

0

は、単純なテキストを置き換える使用してそれを行うための迅速かつ汚い方法です:

  1. くぼみのすべてが並んでいるように、あなたのC#ファイルをフォーマットします。あなたは、テキストフィールドこの"^ {"「を検索するテキスト」に設定しCtrl+H
  2. と交換>Advanced>Format Document
  3. Editが開きでこれを行うことができます。この" {System.Diagnostics.Debugger.Break();"
  4. にフィールドを「置き換え」ウィンドウではほとんど「正規表現を使用」ボタンをクリックしてください
  5. クリックして「すべて置換」またはあなたのファイルは、ネストされた列挙型を持つ任意のクラスを持っている場合Alt+A
  6. を打つ設定し
  7. 、クラス、または構造体には、いくつかのコンパイラエラーがあります。コードがコンパイルされるまで、それらからDebugコールを削除します。ネストしたクラスに独自のメソッドがある場合は、このプロセスをもう一度実行して、置換文字列のタブを増やす必要があります。

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

ファイルにネストされた列挙型などがある場合、置換テキストはメソッドと列挙型を区別しないため、コンパイラエラーが発生します。たとえば、あなたがこの表示されます:あなたはこれらのブレークポイントを無効にする機能が必要な場合

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

を、私は考えることができる最善の方法は、単純なブール値です。どこかのコードでは、この挿入します

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

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

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

あなたがブレークポイントにヒットし、任意のより多くのヒットにしたくない、ウォッチウィンドウタイプでこれと_ignoreDebug = trueを入力してヒット。それを元に戻すには、ブール値_ignoreDebugにアクセス可能などこかに手動ブレークポイントを挿入する必要があります。


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

関連する問題