c# - 基于调用堆栈创建条件断点
问题描述
我有一个通用函数,可用于许多不同类中的许多不同对象。我想在该函数上设置一个断点,该断点仅在调用堆栈存在类时触发。
例如,我有这些 [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,这样这段代码就不会发布
此外,您可以使用此类为断点创建条件
推荐阅读
- r - 如何使用 R Shiny 应用程序过滤具有多个输入的数据框
- html - HTML标签的混乱
- javascript - 重新导出模块有什么好处?
- java - 如何在 Javafx 中的 tableview 中过滤数据
- jenkins - 是否可以将函数导入管道外的 jenkinsfile
- django - 引用 jinja 中当前循环索引之后的对象
- view - Vaadin 具有相同组件的多条路由
- html - Flask 的 DOCTYPE html 无效语法错误
- kernel - Centos7 Xen-Kernel panic 全新安装
- spring-boot - 来自提供静态内容的 Spring Boot App 的属性文件引用