これは便利!Microsoft Researchが開発したDebugger Canvas

マイクロソフトとブラウン大学が共同で作成したのがDebugger Canvasです。
Debbuger Canvasは、新たな方法でデバッグ作業をするためのCode Bubbles™をVisual Studioへ追加するための無料のパワーツールです。

ドキュメントタブを見失ったことはありませんか?
ファイルからファイルへあっちこちを参照しながらデバッグしようとしたことはありませんか?
Debugger Canvasは、拡大したり全体を表示したりできる一つの画面で、関係するコードを一覧表示できます。ブレイクポイントを打ったり、コードにステップインしたりすると、Debugger Canvasは、呼び出し行やローカル変数などデバッグしている対象メソッドだけを表示し、大きな画像でコードを俯瞰する手助けをします。
デモの様子は下の動画を見るとよくわかるかと思います。

動作様子

まず、下の図のようにブレイクポイントを打って、デバッグ実行します。

image

デバッグ実行で、操作をしブレイクポイントに反応すると次の図のようにDebugger Canvasが表示されます。

image

ステップイン実行をしていくと、次のように展開されていく。

image

image

image

Visual Studioエディターの機能を使用しているので、当然次の図のように変数内部を参照することができる。

image

image

コールスタックを確認する際に、次の図のように時間ごとのオブジェクトの変更履歴を参照することが可能。

image

各ペインの左上には、クラス名、名前空間、プロジェクト名などが表示されており、今どこのコードが表示されているのかを認識しやすくなっている。

image

また、クラスにどのようなメソッドが含まれているのかを一覧で確認が可能。

image

このメソッド一覧で、メソッドをクリックすると、次のように表示される。これはブレイクポイントとは関係ないので、依存関係を示す矢印は表示されない。

image

ステップ実行を継続していけば、次のような感じに、複数のメソッドを参照している場合でもしっかりと関係性がわかるように表示される。

image

次の図のようなメモを残すことができる。

image

一般的な質問

一般的な質問として、10個前後の質疑が本家では記載されていますので、気になる方は本家を参照してください。ここでは、3つほど意訳してます。

Debugger Canvasはどこからダウンロードできますか?

現在、提供を始めるための準備の最終段階です。最初のアルファーリリースは2011年の6月上旬に提供を始めます。ダウンロードリンクを確認するために、Debugger Canvas – Microsoft Researchに再度アクセスするか、MSDN Blogs又は、http://twitter.com/andrewbragdonをチェックしてください。

キャンバス上のコードバブルは何ですか?

それぞれのコードバブルは、メンバー定義を表示し、メソッドを呼び出すわけではありません。なので、二回目にメソッドにステップインしても、Debugger Canvasは最初に実行したときと同じバブルを表示します。

Debugger Canvasは実行したすべてのメソッドのバブルを開きますか?

いいえ。
Debugger Canvasは、ユーザの行為を元にバブルを開きます。次の場合、キャンバスにバブルを表示します。

  • メソッドにステップインした
  • ブレイクポイントを設定し、ヒットした
  • コールスタックウィンドウでメソッドをダブルクリックした
  • インターフェイスコールビューでメソッドをダブルクリックした
  • インテリトレースウィンドウからキャンバスにメソッドをD&Dした。(ドラッグしたコールツリーのすべてのメソッドがバブル表示される)
  • 定義に移動を実行した

情報源・ネタ元

DebugViewで.NETプログラムのデバッグ出力を取得する

Visual Studioをインストールしていない環境で、.NETで作成したアプリケーションのデバッグ出力を見るために、DebugViewを使用することができます。

  1. ダウンロードし、DebugViewを管理者権限で起動します。
  2. メニュバーのCapture→Capture Global Win 32を選択します。
    DebugView: Capture options

DebugViewでキャプチャーを開始します。たとえば次のようなコードを実行します。

public ActionResult Index(int page = 1)

{

Debug.WriteLine("HomeController.Index: started, page=" + page);

PagedResult<Event> events;

using (var model = new EventsEntities())

{

events = model.ListPublicEvents(page);

}

Debug.WriteLine("HomeController.Index: finished");

return View(events);

}

DebugViewがキャプチャーし表示します。

DebugView: Debug output

System.IO.Path

tempディレクトリのファイルパス

Dim temppath As String
temppath = System.IO.Path.GetTempPath

結果:「C:\Users\nora\AppData\Local\Temp\」

ランダムなファイル名の生成

Dim randomFile As String
randomFile = System.IO.Path.GetRandomFileName

結果:「cc4pvvbr.3ze」

ランダムなテキストファイルの生成

Dim temptext As String
temptext = System.IO.Path.ChangeExtension(System.IO.Path.GetRandomFileName, ".txt")

結果:「lxkbaz43.txt」

一意の一時ファイルの生成

Dim tempfile As String
tempfile = System.IO.Path.GetTempFileName

結果:「C:\Users\nora\AppData\Local\Temp\tmp4FD5.tmp」

フルパスからファイル名を取得

Dim filepath As String
Dim file As String
filepath = "c:\\windows\\somefile.txt"
file = System.IO.Path.GetFileName(filepath)

結果:「somefile.txt」

ファイルパスからディレクトリ名の取得

Dim filepath2 As String
Dim file2 As String
filepath2 = "c:\\windows\\somefile.txt"
file2 = System.IO.Path.GetDirectoryName(filepath)

結果:「c:\windows」

ファイル拡張子の取得

Dim filepath3 As String
Dim file3 As String
filepath3 = "c:\\windows\\somefile.txt"
file3 = System.IO.Path.GetExtension(filepath)

結果:「.txt」

ファイル名に使用できない文字列が含まれているかどうかの確認

Dim userfile As String = "junk.t>t"
Dim userchars As Char() = userfile.ToCharArray
Dim invalids As Char() = System.IO.Path.GetInvalidFileNameChars
For Each c As Char In userchars
    For Each i As Char In invalids
        If c = i Then
            Throw New Exception("ファイル名に使用できない文字が含まれています。")
        End If
    Next
Next

結果:エラー

System.IO.Path.GetInvalidFileNameCharsは、ファイル名に使用できない文字が一覧で取得できます。