2010年2月16日火曜日

限りなく透明に近かったブレイクポイント

このエントリーをはてなブックマークに追加
失われたブレイクポイントを求めて

Ubuntu 9.04 上に Mono 2.6.1 + MonoDevelop(以下、MD)2.2 をインストールしたので、MD 上で設置したブレイクポイントが有効になるか試してみたら、拍子抜けするくらい、あっさりうまくいったので、ちょっと驚いた。


というのは、以前の MD 2.0 でも同様にブレイクポイントの設置自体は可能で、何度か試しているのだが、ブレイクポイントは常にスルーされており、「まったく、ブレイクしないブレイクポイントだぜ?」と毒づいていたからである(あくまで、オレの環境での話)。

これは、Soft Debugger とやらの恩恵なのだろうか。


ということで、今までできなかったステップバイ実行、ローカル変数の確認もできるようになったので、「さらに使えるようになったな!MD」ということは言ってもいいかもしれない。

あと、NerdDinner ソリューションを開いてみると、次のメッセージが出力され、ソリューションに含まれている Unit Test プロジェクトがオープンできなくなった。


これは、プロジェクトファイル「NerdDinner.Tests.csproj」を次のように修正すると、オープンできるようになるが、
<!-- <ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> -->
プロジェクトタイプをより厳密にチェックするようになったということで、正しい挙動という気がするけど、実際どうなのだろうか(ちなみに、このプロジェクトは、Visual Studio Team System テストツールを使用して作成した Unit Test プロジェクトで、NUnit Test Templates を導入して、NUnit Test プロジェクトを作成した場合は、ProjectTypeGuids 要素はプロジェクトファイルに存在せず、オープン時に上記の様なメッセージが出力されることはなかった)。

また、MD 2.2 インストール記念に ASP.NET MVC 2 RC のビルドをしてみたが、問題なく完了したので、ソリューションに含まれている System.Web.Mvc 用 Unit Test プロジェクトを NUnit 用に修正して、テスト実行を試してみた。それなりにテスト失敗も発生し、いくつか Unit Test、Mono のソースを修正する必要があった。


現状で、テスト失敗数は 50 を切ったが、NotImplementedException のスローによるものがかなりあるので、大半が、Mono 側の問題だろう。

で、既に RC 2 がリリースされているので、そのうち、そっちの方でテストしてみようと思う。

ちなみに、些細な箇所で恐縮だが、ASP.NET MVC 2 側の資源で、次の修正をしてくれたらありがたいんじゃないかと思う。

「System.Web.Mvc プロジェクト/Mvc/Html/DefaultEditorTemplates.cs」から抜粋
foreach (ModelMetadata propertyMetadata in modelMetadata.Properties.Where(pm => pm.ShowForEdit && !templateInfo.Visited(pm))) {
    if (!propertyMetadata.HideSurroundingHtml) {
        string label = LabelExtensions.LabelHelper(html, propertyMetadata, propertyMetadata.PropertyName).ToHtmlString();
        if (!String.IsNullOrEmpty(label)) {
            //builder.AppendFormat(CultureInfo.InvariantCulture, "<div class=\"editor-label\">{0}</div>\r\n", label); // before
            builder.AppendFormat(CultureInfo.InvariantCulture, "<div class=\"editor-label\">{0}</div>" + Environment.NewLine, label); // after
        }

        builder.Append("<div class=\"editor-field\">");
    }

    builder.Append(templateHelper(html, propertyMetadata, propertyMetadata.PropertyName, null /* templateName */, DataBoundControlMode.Edit));

    if (!propertyMetadata.HideSurroundingHtml) {
        builder.Append(" ");
        builder.Append(html.ValidationMessage(propertyMetadata.PropertyName));
        //builder.Append("</div>\r\n"); // before
        builder.Append("</div>" + Environment.NewLine); // after
    }
}

0 件のコメント:

コメントを投稿