8

Asp.Net Web ページで例外がスローされると、完全なスタック トレースと共にエラー メッセージが表示されます。

以下の例:

スタック トレース:
IndexOutOfRangeException: インデックスが配列の範囲外でした。

MyNameSpace.SPAPP.ViewDetailsCodeBehind.LoadView() +5112 MyNameSpace.SPAPP.ViewDetailsCodeBehind.Page_Load(オブジェクト送信者、EventArgs e) +67
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp、オブジェクト o、オブジェクト t、EventArgs e) + 13
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(オブジェクト送信者, EventArgs e) +43
System.Web.UI.Control.OnLoad(EventArgs e) +98
... ...

問題は、表示された行番号が、例外を発生させたコード内の行に対応していないことです。
上記の例では、スタックは行番号 5111 を示していますが、コード ビハインド .cs ファイルには 250 行しかありません!

aspx ページは SharePoint サイトに保存され、コード ビハインドを含むアセンブリは GAC に展開されています。また、デバッグモードでコンパイルしました。

上記の設定で、コード内のどの行で例外が発生したかを調べるにはどうすればよいですか?



strelokstrelokによって指摘された説明:

リリース モードでは、例外の前の番号はコード行ではありません。代わりに、ネイティブのコンパイル済みコードへのオフセットであり、人間にとっては何の意味もありません。詳細はこちら: http://odetocode.com/Blogs/scott/archive/2005/01/24/963.aspx

デバッグ モードでは、PDB ファイルはネイティブ コード オフセットをコード内の .cs 行に自動的にマップし、表示される番号はコード内の対応する行になります。

4

3 に答える 3

11

これらの番号は行番号ではありません。リリース モードでは、スタック トレースには、行番号ではなく、ネイティブ コンパイル コードへのオフセットが含まれます。ここで詳細を読むことができます: http://odetocode.com/Blogs/scott/archive/2005/01/24/963.aspx

スタック トレースで行番号を取得する唯一の方法は、利用可能な PDB ファイルを使用してデバッグ モードでコードをビルドした場合です。

于 2009-02-02T11:12:29.647 に答える
3

コード ビハインド ファイルは完全なクラスではありません。クラス全体が ASP.NET によってコンパイルされるときに使用される部分にすぎません。その行にあるものを見つけるには、Reflector などのツールを使用して、コンパイルされたクラス/アセンブリを調べます。

于 2009-01-29T16:00:33.030 に答える
0

実行中のコードは、画面に表示されているものとは異なる場合があります。一部の仲間があなたのためにそれをリファクタリングしたかもしれません。:)

于 2009-02-02T10:35:35.647 に答える