首页 > 解决方案 > 基于调用堆栈创建条件断点

问题描述

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

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

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

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

我想设置一个断点,仅当它是从函数myFunc()间接调用时才激活。interestingFunction()

标签: c#debuggingstackbreakpointscallstack

解决方案


您可以使用 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,这样这段代码就不会发布

此外,您可以使用此类为断点创建条件


推荐阅读