【问题标题】:Create a conditional breakpoint base on the call stack基于调用堆栈创建条件断点
【发布时间】:2020-05-03 03:16:47
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: c# debugging stack breakpoints callstack


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-31
      • 1970-01-01
      • 2017-03-14
      相关资源
      最近更新 更多