デバッガの落とし穴

久しぶりにC#デバッグをしていたのですが随分とはまってしまいました。単純なポカだし解ってしまえばなんてことないんですけどね。以下、簡単な例で再現できます。

VisualStudio2005(β2)を使用して以下のアプリケーションをビルドします。

using System;
using System.Text;

namespace RecurringTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Foo foo = new Foo();
        }
    }
    class Foo
    {
        private Foo root;
        public Foo()
        {
            this.root = this;
        }
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("Foo [");
            sb.Append(" root =").Append(this.root);
            return sb.Append("]").ToString();
        }
    }
}

さてここで問題です。

このアプリケーションをVisualStudio2005(β2)でステップ実行を用いてデバッグを行うとあるエラーが発生してアプリケーションは異常終了します。アプリケーションが異常終了するのは何故でしょうか。またどんな例外(エラー)が発生するのでしょうか。

ヒント

  • このエントリの標題
  • ネームスペース
  • "デバッグ無し"で実行するならば異常終了しません。
  • ステップ実行しても"自動変数"や"ローカル"等のビジュアライザを使うウインドウが作られていなければ異常終了しません。


2005/08/11追記アプリケーションは更にシンプルなものに書換えました。