Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9328

C# 例外の詳細な文字列表現を返却する方法 サンプルコード

$
0
0

このまま動作します。
コピぺ、編集して利用するためのコードの断片です。
自由に使って頂いて構いません。

例外を以下のような文字列表現にして返却します。
内部例外の入れ子をサポートしています。

返却文字列
System.Exception
例外Bをキャッチして例外Cが送出されました
   場所 テスト.Form_Test.Button1_Click(Object sender, EventArgs e) 場所 C:\***\Form_Test.vb:行 17

InnerException:
System.Exception
例外Aをキャッチして例外Bが送出されました
   場所 テスト.Form_Test.Button1_Click(Object sender, EventArgs e) 場所 C:\***\Form_Test.vb:行 13

InnerException:
System.Exception
例外Aが送出されました
   場所 テスト.Form_Test.Button1_Click(Object sender, EventArgs e) 場所 C:\***\Form_Test.vb:行 10
呼び出し方法.cs
usingSystem;try{// ...何らかの処理...}catch(Exceptionex){Console.WriteLine(ToDetailedString(ex));}

以下の共通処理を任意の場所に貼り付ければそのまま使用できます。

共通処理.cs
usingSystem;usingSystem.Text;/// <summary>/// 例外の詳細な文字列表現を返却する。/// /// キャッチした例外をToDetailedString(ex)として呼び出すと、その例外の型、メッセージ、スタックトレース、入れ子になっている全ての内部例外の左記の文字列表現を返却する。/// キャッチした例外からデバッグ用の文字列を取得したい状況を想定している。/// /// たとえは、3階層の入れ子の例外を渡すと以下のような文字列を返却する。/// /// ------------------------------------------------------------------------------------------------------/// System.Exception/// 例外Bをキャッチして例外Cが送出されました///    場所 テスト.Form_Test.Button1_Click(Object sender, EventArgs e) 場所 C:\***\Form_Test.vb:行 17/// /// InnerException:/// System.Exception/// 例外Aをキャッチして例外Bが送出されました///    場所 テスト.Form_Test.Button1_Click(Object sender, EventArgs e) 場所 C:\***\Form_Test.vb:行 13/// /// InnerException:/// System.Exception/// 例外Aが送出されました///    場所 テスト.Form_Test.Button1_Click(Object sender, EventArgs e) 場所 C:\***\Form_Test.vb:行 10/// ------------------------------------------------------------------------------------------------------/// </summary>/// <param name="ex">文字列表現を取得する対象の例外</param>/// <returns>例外の文字列表現</returns>publicstringToDetailedString(Exceptionex){varbuf=newStringBuilder();varcurrentException=ex;while(true){buf.AppendLine(currentException.GetType().FullName);buf.AppendLine(currentException.Message);buf.AppendLine(currentException.StackTrace);if(currentException.InnerException==null){break;}else{currentException=currentException.InnerException;buf.AppendLine();buf.AppendLine("InnerException:");}}returnbuf.ToString();}

Viewing all articles
Browse latest Browse all 9328

Latest Images

Trending Articles