2

Throw以下、なぜ私の元の行番号を維持しないのですか?
DerivedPageを実行すると、ログファイルにエラーが7行目としてリストされます。4
行目と言ってはいけませんか?私が持っていればそれは理にかなっていThrow exますが、私はそうではありません。それ自体で、エラーを再スローしてバブルアップするだけで
はありませんか?Throw

DerivedPageでブロックを完全に削除するとTry...Catch、ログファイルにエラー行として3が正しくリストされますが、エラーが発生した場合に情報をログに記録できません。

DerivedPageを維持し、ログに正しい行番号を保持させるにはどうすればよいですか?

Public Class DerivedPage Inherits BasePage
 Page_Load(o,e)
   Try
      Dim a = 3 -"a"
   Catch ex As Exception
      log.Info(...)
      Throw
   End Try
End Class

ベースページ:

Public Class BasePage
 Protected Overrides Sub OnError(e)
   MyBase.OnError(e)
   log.Error(Me.GetType(), Server.GetLastError)
 End Sub
End Class

編集log.ErrorInnerExceptionが存在する場合は出力します。この場合はそうです。ただし、InnerExceptionのスタックトレースには行番号は含まれず、例外の詳細のみが含まれます。

4

3 に答える 3

0

例外が再スローされると、元の例外の詳細がオブジェクトのInnerExceptionプロパティに格納されます。あなたはそこにあなたのすべての詳細を持っているべきです。

于 2011-04-14T15:15:32.223 に答える
0

スタック トレースに正しい行番号を表示する実装可能なメソッドがあります。

例外の再スローと完全なコール スタック トレースの保持 - Fabrice のウェブログ

コードは C# ですが、PreserveStackTraceメソッドのコードは比較的簡単に VB.NET に移植できるはずです。

于 2011-04-14T15:15:39.693 に答える
0

解決策 :スタック トレースの間違った行番号ごとに 2 つの解決策は、現在の例外を内部として新しい例外をスローするか、ヘルパー メソッドを使用します。
新しい例外をスローします。

于 2011-04-14T15:57:28.593 に答える