我想知道使用以下代码确定调用当前执行代码的方法或对象的名称(以及可能的更多信息)是否安全:
StackTrace stackTrace = new StackTrace(); // get call stack
StackFrame[] stackFrames = stackTrace.GetFrames(); // get method calls (frames)
更具体地说,是否有任何特殊/极端情况下访问框架不起作用或抛出异常?
我查看了the MSDN page of StackTrace,但未发现任何可能的问题。
答案 0 :(得分:3)
编译器可以通过提供与您直接查看代码所期望的视图相比的方式来内联方法。您可以使用属性来确保您的方法没有内联:
[MethodImpl(MethodImplOptions.NoInlining)]
public void MyMethod() {
// Get the stack trace.
}
否则,如果内联MyMethod
,则堆栈跟踪不包含您的代码可能依赖的MyMethod
框架。