例外から作成されたスタックトレースからライン番号を取得しないのはなぜですか?
-
19-09-2019 - |
質問
わかった;このコードがデバッグモードで実行されていると仮定します -
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)が必要です。シンボルファイルが利用可能です 両方 デバッグとリリースビルド。
所属していません StackOverflow