12

Visual Studio は、ブレークポイントにヒットしたときにコール スタックを出力し、条件が満たされたときに停止できます。それを組み合わせて、選択した別の関数から関数が呼び出されたときに停止し、他のすべての呼び出しを無視する方法はありますか?

4

2 に答える 2

4

これを行う唯一の方法はマクロを使用することだと思います。ブレークポイントを右クリックし、[ヒットしたとき..]を選択し、[マクロの実行]を選択して、次のようなマクロをポイントします。

 Sub ContinueUnlessCalledFromRightContext()
    For Each frame As EnvDTE.StackFrame In DTE.Debugger.CurrentThread.StackFrames
        If (frame.FunctionName.Contains("SomeOtherMethodsName") Then Exit Function
    Next

    DTE.Debugger.Go() ` we weren't called from the right context so continue execution.
End Sub

上記は半分の疑似コードです。私は実際にそれをテストしませんでしたが、いくつかのマイナーな編集で動作するはずです。

ブレークポイントからマクロを実行するのは本質的に非常に遅いため、ブレークポイントに何度もヒットすると、これは地獄のように遅くなることに注意してください。

ところで、.NET / C#について質問している場合は、はるかに簡単でしたが、条件付きブレークポイントを作成することもできます。

new System.Diagnostics.StackTrace().ToString().Contains("SomeOtherMethodsName")

...そしてそれで終わります。

于 2012-01-25T19:12:13.370 に答える
3

確かではありませんが、フィルタリングまたは条件のいずれかでできるかもしれませんが、代わりに呼び出しプロセスにブレークポイントを置く方が簡単かもしれません

これは良いリソースです: Visual Studio 2010 でのデバッグの習得 - 初心者向けガイド

于 2012-01-25T16:37:19.213 に答える