2015-11-13 9 views
5

MSDNによれば、Environment.StackTraceArgumentOutOfRangeExceptionを投げることができますが、これはどのように可能かわかりません。Environment.StackTraceはどのようにArgumentOutOfRangeExceptionをスローすることができますか?

Environment.cs StackTracesourceExceptionがnull

public static String StackTrace { 
    [System.Security.SecuritySafeCritical] 
    get { 
     Contract.Ensures(Contract.Result<String>() != null); 

     new EnvironmentPermission(PermissionState.Unrestricted).Demand(); 
     return GetStackTrace(null, true); 
    } 
} 

コールGetStackTrace(Exception, bool)

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); 
} 

上記方法はStackTraceStackTrace(bool)StackTrace(Exception, bool)の2つのコンストラクタを呼び出す可能性を有します。

最初の呼び出しから、Environment.StackTrace呼び出しによってこのメソッドに到達すると、StackTrace(bool)が呼び出されることが保証されています。

しかし、StackTrace(bool)は、MSDNに従って例外をスローしません。他のコンストラクタコール、StackTrace(Exception, bool)MSDN)は例外をスローしますが、ArgumentNullExceptionではなくArgumentOutOfRangeExceptionです。私はArgumentOutOfRangeExceptionを投げるコードで他のメソッド呼び出しを見ていません。

私は何が欠けていますか? Environment.StackTraceが実際に例外をスローすることは可能ですか?

+0

私は 'new StackTrace(int)'がこれを行うことができますが、 'Environment.StackTrace'にどのように伝播するかはわかりません。おそらく、これらはいくつかの自動ツールから表示されます。 https://msdn.microsoft.com/en-us/library/wybch8k4(v=vs.110).aspx – leppie

+0

@leppie「skipFrames」を使ったメソッドだけが 'Stacktrace.cs'の唯一の場所であることにも気付きました。それは 'ArgumentOutOfRangeException'を投げますが、' Environment.StackTrace'から直接行った呼び出しが 'skipFrames'パラメータを使用するメソッドに当たらないことがわかりました。 – Adam

+0

MSDNの記事の例外情報は一般的ではありません。それは常に不完全で、コピー/ペーストのバグに悩まされます。誰も例外に遭遇したことがないなら、誰も文書化された例外を*削除*することを考えていないとすれば、それらの記事を修正するのは難しいです。 –

答えて

3

実際にプロパティ値を取得しても例外は発生しません。 Environment.StackTrace propertyのドキュメントから例外情報を削除しました。

2

ソースコードを読む私は、ArgumentOutOfRangeExceptionがEnvironment.StackTraceのコードパスに投げられるべきでないことに同意します。

MSDNが修正を必要とするのは今回が初めてではありません。 「任意の候補」をクリックする必要があります。右側のリンクをクリックします。 「このページは役に立ちましたか?はい/いいえ」と応答した後、他のフィードバックを促します。

関連する問題