1

ログのスタックの一番上に、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というエラーが表示されます (C# ASP.NET アプリケーション)。

@Web.UI.UserBrochurePage.Page_Load(Object,EventArgs)+25 Line: 0  
@System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr,Object,Object,EventArgs)+0 Line: 0  
@System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object,EventArgs)+26 Line: 0  
@System.Web.UI.Control.OnLoad(EventArgs)+38 Line: 0 
@System.Web.UI.Control.LoadRecursive()+35 Line: 0
@System.Web.UI.Page.ProcessRequestMain(Boolean,Boolean)+1160 Line: 0 

私が理解していないこと:

  1. すべてのエラーは 0 行目にあります
  2. 最も興味深いエラー (私のコードでは一番上のエラー) の後に "+25" があります。行の文字オフセットであると想定していましたが、それらが何を意味するのか理解できませんでした...その場合、意味のあるもの(パラメーター宣言の途中)を指していません。

これはリリース モードの運用システムですが、通常はスタック トレース オブジェクトから行番号を取得できます。この場合、残念ながら、デバッグ システムではエラーが再現されないため、これで最善を尽くしています。

アドバイスをいただければ幸いです。

ありがとう、トム

4

2 に答える 2

6

コードがデバッグモードではなくリリースモードでコンパイルされているため、スタックトレースのすべての呼び出しで「行 0」が表示されると思います。デバッグ モードでは、コードはデバッグ シンボル ファイル (.pdb) を含むようにコンパイルされます。このファイルが利用可能になると、例外スタック トレースは正確に行番号を表します。

いずれにせよ、残りはフレームワーク アセンブリの内部呼び出しであるため、Page_Load の行番号だけが重要です。

各スタックトレースエントリの後の +xx 番号は、明らかに「ネイティブコードへのバイトオフセット」です。正直に言うと、最初はティックまたはミリ秒単位の実行時間だったように見えました。

于 2009-04-21T06:38:48.177 に答える
2

オフセットの理解については、この質問を参照してください。実際には、デバッグ情報を含む本番バイナリをビルドする必要があると思います.ILを調べて、どのオフセットがどの行を意味するかを調べるよりもはるかに簡単です。

于 2009-04-21T06:35:59.430 に答える