ページ

2010年11月27日土曜日

拾い読み 連載:Visual Studioデバッグ手法

@IT連載:Visual Studioデバッグ手法をまとめ読みしましたのでコメントを。

第1回 Visual Studio 2010のデバッグ機能をまとめる

一般的なデバッグ手法というより、IDEの利用、使用方法のガイドといった方向のようです。たしかに知っている人は使っているけど、といった機能は、特に高機能IDEには、多いのでそのあたりが紹介されているといい勉強になります。

デバッグの事前準備:バグ情報の収集方法

ここで、MSエラーコードの構成が記載されています。ちょっと役に立つかも知れません。ただ、良く見るエラーって、「その他」扱いのものばかりなんですが。

Visual Studio 2010を使用したデバッグ作業の基本

ブレークポイントについてはVS2008と変わりありません。まあ、このあたりは普段使いの範囲でしょう。ただ、一部では「特定の条件を満たした場合に停止する」機能があるようです。これは便利といえば便利なのですが、使い勝手は設定可能な条件次第です。いままではこういう特別な条件でログ、トレースを呼び出すようにしていて、そちらのブレークポイントを設定していました。前準備無しでいけるのは便利でしょうが、あらかじめある程度のデバッグサポートを想定したコードを作るのとどちらがいいのか悩むところです。

トレースポイントはVS2010で追加された新機能ですね(VS2008にはありません)。まあ、実際には状況によりけりですが、printfデバッグが簡単になるのはいいことでしょう。状況によってはログ、トレースコードとして残しておくべき場合もありますので、無条件に、というわけにはいきません。そのあたりは設計方針etcに依存するところです。単純なデバッグ専用の実行トレース程度でしたら、この機能は便利でしょう。

高機能IDE自体は悪いものではないのですが、インテリセンスと強力なデバッガの組み合わせの所為で(といったら失礼かもしれませんが)、理解しやすい(覚えやすい)名前を付けるとか、バグの取りやすさを想定したコーディング、といった技能が失われていく面もあります。単体レベルのテストならともかく、結合、システムテストレベルでは、このあたりを想定しているコードと想定していないコードではデバッグのはかどり方が違ってきますからね。

第2回 Visual Studio 2010の新機能「IntelliTrace」

Ultimate専用の機能ですと試しようがないですね。

最初にIntelliTraceの概要を exception 時のコールスタックトレースで解説していますが、これは変ですね。コールスタックトレース自体は既存の機能で、UI付きになって見やすくなったに過ぎません。この例では有難味が感じられません。

本来の有難味は後半に記述されているような、テストケースの(自動的な)再実行が可能になるところにあるように思えます。イベントベースで実行系列を保存しているというのは、(前半で紹介されたような)単純なトレースバックではなく、それを再実行するとこにあるはずです。ですが、この機能がUltimate+Team Foundation Server必須となると、それこそ滅多なことでは試すことができませんね。残念です。

第3回 Visual Studio 2010による高度なデバッグを極める

今回は特殊なデバッグ技法満載のようです。

(1).dllファイル(=アセンブリ)のデバッグ

dll用のデバッグ情報が付属していれば、ですよね。.NETあたりは確か付属していたと思いますが、サードパーティものだとついていないケースもありますから。基本的には自作(インハウス)DLL限定の話でしょうか。

(2)リモート・デバッグ

へえーこれは知らなかった。リモートデバッガなんかがあったんですね。ですが、「サーバ環境なんかで余計なものを入れることができない」ような環境だと、リモートデバッガ自体も禁止されそうですが、どうなんでしょう。まあ、多くの場合はそこまでうるさいわけではなく、ライセンス上の問題で環境が制限される場合のほうが多いかとおもいます。そういう場合にはリモートデバッガ便利ですね。

(3)別サーバのIIS上で実行されるプロジェクトのデバッグ

Webサービスデバッグはリモートデバッグとは別になるんですか。リモートデバッグといってまず想定したのがこの組み合わせだったので、ちょっとびっくり。以前の仕事の時は簡単なログ機能だけでこなしましたが、どこまでできるんでしょうね?ソースレベルいじることなく対処できるのであれば、色々と都合がいいわけですが。

(4)コードからのデバッガ制御

これはタイトルがミスリーディングですね。コード側で現在デバッガ制御下にいるかどうかを判定できる機能のようです。たしかにデバッガ使用時はユーザインタラクションが入るために通常のタイムアウトでは引っかかって処理が進まなくなることがありますから、そういう場合のみタイムアウト増大(あるいは無効化)できるのは有難い機能です。

(5)Internet Explorer 8の拡張機能デバッグ

これこそ思いっきり特殊例。まあ、こういう技法があるとだけ覚えておきます。

(6)並列プログラムの可視化機能

これはどうでしょう。並列系はデバッガでどうなるものではないですから。それは無いよりはましですよ。しかし並列系の障害って、おそろしく再現性が低く、またタイミング依存するので、デバッガで追っても無駄になることの方が多いものです。むろん、ここで例に挙げられているような障害なら見つけられるでしょうが、これはレベルが低すぎませんかね。並列系についてはひたすら設計時の検証にかかっている、と思っています。

さて、色々な便利な機能が紹介されているのですが、難点は、バージョンによって使えたり使えなかったりする点ですね。個別にそのあたりをまとめてくれていればずいぶんと助かるのに、と思いました。フルバージョンのVSがないと試すことのできないものが含まれているのが残念なところです。あるいは、こう便利なんだからフルセットを手にいれようよ、というお誘いなのかもしれません。

0 件のコメント:

コメントを投稿