0

呼び出しスタックに特定のメソッドがある場合にブレークポイントをヒットさせたい。Visual Studioデバッガーでこれをどうにかして行うことができますか?

コードが特定のメソッドから呼び出されたときにブレークポイントがヒットすることを確認したいのですが、他のメソッドからはヒットしません。

たとえば、2つの呼び出しスタックがあります。

DBReadRecord()
GetRecord()
ActivityMonitor()

DBReadRecord()
GetRecord()
UserButtonDown()

メソッドからではなくDBReadRecord、メソッドから呼び出された場合にのみ、ブレークポイントがヒットするようにします。UserButtonDown()ActivityMonitor()

VisualStudio10と.Net3.5を使用しています。

4

2 に答える 2

2

リフレクション ベースのハッキングを実行することもできます (たとえば、Express エディションには高度なブレークポイント機能がないようです)。

    void Foo()
    {
        Foo2();
    }
    void Foo2()
    {
        var trace = new StackTrace();
        if (trace.GetFrames().Reverse().FirstOrDefault(f => f.GetMethod().Name == "Foo") != null)
            Debugger.Break(); // it lives under System.Diagnostics namespace
    }
    void Test()
    {
        Foo2(); // doesn't break here
        Foo(); // break here
    }

そして、あなたの特定の方法で:

Foo DBReadRecord()
{
     var trace = new StackTrace();
     if (trace.GetFrames().Reverse().FirstOrDefault(f => f.GetMethod().Name == "UserButtonDown") != null)
         Debugger.Break();
}

これはパフォーマンスに大きく影響するため、奇妙なデバッグ状況に対する一時的な解決策にすぎないことに注意してください。

また、構成で最適に機能することを覚えておいてDebugください。スタックトレースにないメソッドに影響を与える最適化がどのように発生するかはわかりませんが、最適化がオンになっているとそのようなことが発生する可能性があります。

于 2012-10-02T11:57:09.023 に答える