给定以下流畅的 API 调用:
Foo()
.Bar1(() => { ... })
.Bar2(() => { ... })
.Bar3();
我想稍后确定 Bar1、Bar2 和 Bar3 行的代码文件和行号(嗯...向上)它们的调用堆栈...
案例 1: ...在 Bar1/Bar2/Bar3 扩展方法中。
我当前的解决方案:我立即在这些方法中创建堆栈跟踪并查找信息。
未解决的问题:线路信息属于Foo()
线路,而不是Bar#(...)
-line :(
情况 2: ...稍后,在代码中完全位于其他位置的地方,以防给定的委托在执行时引发异常。
我当前的解决方案:我检查异常的堆栈跟踪并找到正确的行:)
特例 3: Bar3 在方法内部定义了委托,我现在还想要.Bar3()
这样的委托抛出异常时的行。
我目前的解决方案:还不知道,委托是在其他地方创建的,我不能使用与案例 2 相同的方法。我唯一的机会是来自案例 1 的信息,但是,该信息并不完全正确(错误的行数字)。
问:你知道在这三种情况下如何确定正确的代码文件和行号吗?
注意:性能不是那么相关,因为这是测试框架的一部分。