我有一种独特的情况。我一直在开发一个用于发送电子邮件的开源库。在这个库中,我需要一种可靠的方法来获取调用方法。我StackTrace
通过分析其中的StackFrame
对象来完成此操作。这在关闭优化的调试模式项目中没有问题。
当我切换到打开优化的发布模式时会出现问题。堆栈跟踪如下所示:
> FindActionName at offset 66 in file:line:column <filename unknown>:0:0
> Email at offset 296 in file:line:column <filename unknown>:0:0
> CallingEmailFromRealControllerShouldFindMailersActionName at offset 184
in file:line:column <filename unknown>:0:0
> _InvokeMethodFast at offset 0 in file:line:column <filename unknown>:0:0
> InvokeMethodFast at offset 152 in file:line:column <filename unknown>:0:0
...
这取自失败的单元测试。在此跟踪的第 3 行中,我应该看到一个TestEmail
在其他地方定义的名为的方法,但我相信 JITter 正在内联它。我读过你可以通过使方法虚拟来防止内联,但这不起作用。有谁知道防止方法内联的可靠方法,因此您的方法将显示在堆栈跟踪中?