ローカル変数の使用
このような条件付きブレークポイントを作成する最も簡単な方法は、新しいスレッド静的変数(または、グローバルである必要がある場合は静的)を作成することです。コードが次のようになっているとします。
class Program
{
#if DEBUG
[ThreadStatic]
static int breakVariable = 0;
#endif
static void Main(string[] args)
{
TestMethod2();
TestMethod1();
TestMethod2();
TestMethod2();
TestMethod1();
TestMethod2();
}
static void TestMethod1()
{
Console.WriteLine("test1");
}
static void TestMethod2()
{
Console.WriteLine("test2");
}
}
ここで、ブレークポイント1をに設定し、ブレークポイント2をに設定するConsole.WriteLine("test1");
としますConsole.WriteLine("test2");
。ブレークポイント1が2回ヒットした場合にのみ、ブレークポイント2でブレークしたいとします。この場合Hit Count...
、breapoint1のプロパティをに設定する必要がありますbreak when the hit count is equal to 2
。次に、When Hit...
プロパティチェックPrint a message
とテキストボックスに次のように入力します{breakVariable = 1}
。

Condition...
次に、breakpoint2のプロパティをに設定しbreakVariable == 1
てチェックしIs true
ます。

ヒット後にbreakpoint2を非アクティブにしたい場合は、When Hit...
プロパティを使用してそのPrint a message
値をに設定することができます{breakVariable=0}
。
マクロを使用する
このアプローチは、特にVBAが気に入らない場合(私のように:))ははるかに困難ですが、アプリケーションコードを変更する必要がないため、興味があるかもしれません。2つのマクロを定義しましょう。
Imports System
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports EnvDTE90a
Imports EnvDTE100
Imports System.Diagnostics
Public Module Module1
Public Sub SetMyBreakpoint()
Dim bps As EnvDTE.Breakpoints
bps = DTE.Debugger.Breakpoints.Add(File:="C:\MyProject\ConsoleApplication1\Program.cs", _
Line:=25)
Dim bp As EnvDTE80.Breakpoint2
For Each bp In bps
bp.Tag = "mytag"
' Add this line only if you want the breakpoint to be removed on hit
' Although I don't know why - it does not always worked :(
bp.Macro = "Macros.MyMacros.Module1.RemoveMyBreakpoint"
Next
End Sub
Public Sub RemoveMyBreakpoint()
Dim bp As EnvDTE.Breakpoint
For Each bp In DTE.Debugger.Breakpoints
If (bp.Tag = "mytag") Then
bp.Delete()
End If
Next
End Sub
End Module
ここで、breakpoint1については、Hit Count...
以前と同じようにプロパティを設定しますが、チェックをチェックしてプロシージャを選択するWhen Hit...
代わりに、プロパティに設定します。メソッドにコードファイルのフルパスと正しい行を指定することが非常に重要です(APIをチェックして、コードファイルの代わりに関数などでブレークポイントを設定する他の方法を見つけることができます)。ここでの1つの小さな注意点(2番目のブレークポイントの自動削除が常に機能するとは限らないことを確認しました)が、おそらくそれは私のVisualStudioでした。Print a message
Run a macro
SetMyBreakpoint
Breakpoints.Add
コールスタックの使用
Condition
ブレークポイントのプロパティを再度使用できます。詳細については、この質問をご覧ください。