ナビゲーション リンクのスキップトップページ > C#プログラミング > ch2-3-2 例外テキストを解読する
▼ ch2-3-2 例外テキストを解読する ▼

  例外が発生したコードを特定することは、システム改善の大きな一歩を踏み出す前提となっています。

1: 型が正しく変換されないとき

using System;

namespace FooPah
{
    class TypeError
    {
        private static void Main()
        {
            try
            {
                // "z" と入力されたら・・・。
                Console.Write("Input(0-9):");
                int a = int.Parse(Console.ReadLine());
            }
            catch(Exception e)
            {
                Console.WriteLine(e.ToString());
            }
        }
    }
}

【出力結果】
System.FormatException: 入力文字列の形式が正しくありません。
at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
at System.Int32.Parse(String s)
at FooPah.TypeError.Main() in d:\test2.cs:line 12


  上記のサンプルでは一番下にある「~ in d:\test2.cs:line 12」が該当しますが、多くの例外はある程度コード情報を出力してくれます。これはデバッグモードでビルドしたアプリケーションにて出現し原因特定を強力にサポートします。このように例外テキストを読むだけで解決してしまう場合もあります。

  続いて、"_UserName"を呼び出したいのに、"UserName"とアンダーバーの入力を失念してしまった為、無限に再帰が発生しスタック領域を満たしきってしまった場合のサンプルです。

2: スタックオーバーフローとプロパティ

using System;

namespace FooPah
{
    public class StackOverflow
    {
        // 本来はここを呼び出したい。
        private static string _UserName;

        public static string UserName
        {
            get
            {
                // 再帰している。
                return UserName;
            }
            set
            {
                _UserName = value;
            }
        }

        private static void Main()
        {
            try
            {
                Console.WriteLine(UserName);
            }
            catch(Exception e)
            {
                Console.WriteLine(e.ToString());
            }
        }
    }
}

【出力結果】
System.StackOverflowException:
種類 System.StackOverflowException の例外がスローされました。


  以上のように分かりにくい物もあります。規模の大きいアプリケーションでは複雑な例外が発生することが大半になります。また、例外の原因が遠いコードにある事もありえます。しかし、改善箇所発見への貴重なメッセージに変わりありませんので、嫌忌せずじっくり意味を汲み取ってみましょう。

Continue
ナビゲーション リンクのスキップトップページ > C#プログラミング > ch2-3-2 例外テキストを解読する

テスト[1]
♥ 2010年03月07日 16:36:41 UPD!

情報オリンピック[2]
♥ 2009年07月04日 13:39:15

2008年ですね。[1]
♥ 2008年01月01日 00:00:00

自由なスレ[3]
♥ 2007年09月22日 20:51:58

2007年ですね。[1]
♥ 2007年01月01日 00:00:00


RSS : FooPah!の更新情報
RSS : 掲示板全体の投稿情報
Copyright(C)2001-2009 FooPah!, All rights reserved.