根据调用堆栈创建条件断点

Create a conditional breakpoint base on the call stack

我有一个通用函数,可用于许多不同 classes 中的许多不同对象。我想在该函数上设置一个断点,该断点仅在调用堆栈存在时触发 class.

例如,我有这些 [meta] 调用堆栈

myFunc()
Intermediate.class.intermediateFunction()
Interesting.class.interestingFunction()

myFunc()
Intermediate.class.intermediateFunction()
Boring.class.boringFunction()

我想在 myFunc() 中设置一个断点,只有在从 interestingFunction() 函数间接调用它时才会激活。

您可以使用 System.Diagnostics 命名空间以编程方式查询堆栈跟踪。 Yoy 可能会这样做:

System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace();
var f = st.GetFrames();
var names = f.Select(f => f.GetMethod().Name).ToList();
if (names.Contains("DoSomething4"))
{
    var a = 0; // Set breakpoint in this line or use Debugger.Launch()
}

您可以使用#if DEBUG 和#endif,这样这段代码就不会发布

此外,您可以使用此 class

创建断点条件