根据调用堆栈创建条件断点
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
创建断点条件
我有一个通用函数,可用于许多不同 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
创建断点条件