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 行に自動的にマップし、表示される番号はコード内の対応する行になります。