例外から作成されたスタックトレースからライン番号を取得しないのはなぜですか?

StackOverflow https://stackoverflow.com/questions/2228893

質問

わかった;このコードがデバッグモードで実行されていると仮定します -

static StackFrame GetTopFrameWithLineNumber(Exception e)
{
    StackTrace trace = new StackTrace(e);
    foreach (StackFrame frame in trace.GetFrames())
    {
        if (frame.GetFileLineNumber() != 0)
        {
            return frame;
        }
    }
    return null;
}

私はいつもnullを返します。私が検査した場合、なぜスタックフレームにライン番号がないのですか Exception.StackTrace 文字列、それは明らかにフレームワーク以外のコード用にそれらを持っていますか?私が知らない例外からスタックトレースを構築することにいくつかの問題はありますか?

明確に編集する:スローされた例外では、Stacktraceプロパティのライン番号を確認できます。私はそれが私が必要とする他のすべてを持っていることを意味すると仮定しています。

役に立ちましたか?

解決

による 例外をとるスタックトレースコンストラクターの過負荷に関するドキュメント Stacktraceをそのように作成するとき、ライン番号を期待することはできません。

Stacktraceは、発信者の現在のスレッドで作成されており、ファイル名、行番号、または列情報は含まれていません。

ライン番号を取得します, 、使用する必要があります ブールと例外をとる過負荷.

また、行番号にはシンボルファイル(PDB)が必要です。シンボルファイルが利用可能です 両方 デバッグとリリースビルド。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top