【发布时间】:2013-07-23 06:24:39
【问题描述】:
鉴于以下流畅的 API 调用:
Foo()
.Bar1(() => { ... })
.Bar2(() => { ... })
.Bar3();
我想稍后确定 Bar1、Bar2 和 Bar3 行的代码文件和行号(嗯...向上)它们的调用堆栈...
案例 1: ...在 Bar1/Bar2/Bar3 扩展方法中。
我当前的解决方案:我立即在这些方法中创建堆栈跟踪并查找信息。
未解决的问题: 线路信息属于Foo() 线路,而不是Bar#(...)-线路:(
案例 2: ...稍后,在代码中完全位于其他位置的地方,以防给定的委托在执行时引发异常。
我当前的解决方案:我检查异常的堆栈跟踪并找到正确的行:)
特殊情况 3: Bar3 定义了方法内部的委托,当这样的委托抛出异常时,我现在仍然想要 .Bar3() 行。
我目前的解决方案:还不知道,委托是在其他地方创建的,我不能使用与案例 2 相同的方法。我唯一的机会是来自案例 1 的信息,但是,该信息并不完全正确(行号错误)。
问:你知道在这三种情况下如何确定正确的代码文件和行号吗?
注意:性能并不那么重要,因为这是测试框架的一部分。
【问题讨论】:
-
据我所知,这一行与一行代码有关。我敢猜测,Visual Studios 的调试器也会这样认为。我认为您必须将其拆分为 3 个单独的方法调用
-
您可以在代表上设置断点,即使您必须先选择它然后设置断点。有点棘手,但它有效。
标签: c# stack-trace