2012-03-19 11 views
4

Global.asaxのApplication_Errorイベント内にエラーハンドラを実装する.NET 4.0 Webアプリケーションがあります。例外から詳細を取得するには?

例外が、これはそれをインターセプトし、ユーザーにログインし、ページにエラーが発生した上で、セッションの内容などのように私に

のさまざまな情報を含む電子メールを送信します。これは、すべての素晴らしいですが、発生しました私は見つけることができないように見えるいくつかの基本的な細部があります。

例えば、これは私が受け取ることになるエラーと関連するスタックトレースのサブセットである:これは私はA)コントロールの名前とBを知って行う可能性があるとして

Source: Telerik.Web.UI 

Message: Selection out of range 

Parameter name: value 

Stack trace: at Telerik.Web.UI.RadComboBox.PerformDataBinding(IEnumerable dataSource) 
    at Telerik.Web.UI.RadComboBox.OnDataSourceViewSelectCallback(IEnumerable data) 
    at System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback) 
    at Telerik.Web.UI.RadComboBox.OnDataBinding(EventArgs e) 
    at Telerik.Web.UI.RadComboBox.PerformSelect() 
    at System.Web.UI.WebControls.BaseDataBoundControl.DataBind() 
    at Telerik.Web.UI.RadComboBox.DataBind() 
    at System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound() 
    at Telerik.Web.UI.RadComboBox.OnPreRender(EventArgs e) 
    at System.Web.UI.Control.PreRenderRecursiveInternal() 
    at System.Web.UI.Control.PreRenderRecursiveInternal() 
    at System.Web.UI.Control.PreRenderRecursiveInternal() 
    at System.Web.UI.Control.PreRenderRecursiveInternal() 
    at System.Web.UI.Control.PreRenderRecursiveInternal() 
    at System.Web.UI.Control.PreRenderRecursiveInternal() 
    at System.Web.UI.Control.PreRenderRecursiveInternal() 
    at System.Web.UI.Control.PreRenderRecursiveInternal() 
    at System.Web.UI.Control.PreRenderRecursiveInternal() 
    at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 

今のように美しいです)コントロールを「範囲外」にした値。

このような情報をどのように得ることができますか?これをデバッグモードで実行し、Global.asaxに渡されたオブジェクトは、私が見ることができる詳細を保持していないようです。

+0

例外が発生した場所で 'catch'する必要があり、探している情報を得るためにそこからログインする必要があります。 –

+0

['MasterPage.OnError(EventArge)'](http://msdn.microsoft.com/en-us/library/system.web.ui.templatecontrol.onerror.aspx)をオーバーライドしようとしましたか? – abatishchev

+0

既に表示しているデータはどのように入手していますか?例外には必要な情報が含まれていませんか?あなたがスローされた例外にデータを追加する立場にない限り、運が悪いかもしれません... – Chris

答えて

2

あなたのアセンブリと共にPDBを発送してください。こうすることで、例外スタックトレースに行番号とソースコードのファイル名が得られます。また、行番号を取得すると、その行に書かれているコードが分かります。

+0

上記のエラーは、すべてのデバッグオプションがIDE – cusimar9

+0

@ cusimar9でオンになっていて、表示されていたエラーがTelerikアセンブリ内にあることを示しています。それにPDBもありますか?このスタックトレースでは、実際にコード内で例外が発生した場所を確認することはできません。 –

+0

いいえTelerikアセンブリ用のPDBがありません。これはサードパーティのツールキットです。私はTelerikアセンブリのどこに例外が発生するのか興味がありません、私は私のページのどのコントロールがそれを引き起こしているのかを知る必要があります。私のソリューション内のプロジェクトのPDBを持っています – cusimar9

-1

try 
{ 
} 
catch(Exception ex) 
{ 
    Response.Write("Source: " + ex.Source); 
    Response.Write("Message: " + ex.Message); 
    Response.Write("Stack Trace: " + ex.StackTrace); 
} 
+0

ex.ToString()? – Pankaj

+0

私はすでにその情報を表示していますが(私の記事を参照してください)、エラーの詳細をすべて表示していません – cusimar9

+0

次に例外のような情報をいくつか追加できますButton1_Clickに例外が発生した場合は、Response.Write "ButtonName1のPageName.aspxで発生した例外 –

0

を次のようにあなたは、私はいくつかのカスタムコードを実装することなく、自分の要求を満たすことができなかったような例外を表示することができます。

私は、すべてのポストバック時に__EVENTTARGETおよび__EVENTARGUMENTパラメータを格納するMasterPage内にいくつかのコードを追加しました。これらは、新しいページロードがあるたびにクリアされます。エラーが発生した場合、これらの値はデバッグ電子メールの一部を構成し、エラーが発生したときにユーザーが何をしているのかを理解することができます。