根据MSDN,Environment.StackTrace可以扔,ArgumentOutOfRangeException但我不明白这是怎么可能的.
Environment.cs StackTrace(来源)
public static String StackTrace {
[System.Security.SecuritySafeCritical]
get {
Contract.Ensures(Contract.Result<String>() != null);
new EnvironmentPermission(PermissionState.Unrestricted).Demand();
return GetStackTrace(null, true);
}
}
Run Code Online (Sandbox Code Playgroud)
调用GetStackTrace(Exception, bool)where Exception为null.
Environment.cs GetStackTrace(Exception, bool)(source)(删除了注释,它们无关紧要)
internal static String GetStackTrace(Exception e, bool needFileInfo)
{
StackTrace st;
if (e == null)
st = new StackTrace(needFileInfo);
else
st = new StackTrace(e, needFileInfo);
return st.ToString( System.Diagnostics.StackTrace.TraceFormat.Normal );
}
Run Code Online (Sandbox Code Playgroud)
上面的方法有可能调用两个构造函数StackTrace,StackTrace(bool)和StackTrace(Exception, bool).
我们从第一次调用中知道,如果通过Environment.StackTrace调用达到此方法,则StackTrace(bool)保证调用.
但是StackTrace(bool)根据MSDN不会抛出任何异常.另一种可能的构造函数调用StackTrace(Exception, bool)(MSDN)会抛出异常,但事实ArgumentNullException并非如此ArgumentOutOfRangeException.我没有在代码中看到任何其他方法调用ArgumentOutOfRangeException.
那我错过了什么?是否有可能Environment.StackTrace抛出异常,如果是这样的话怎么样?