Visual Studio でデバッグを行うときの呼び出し履歴に対するメソッドのマップ

デバッグ中に呼び出し履歴を視覚的にトレースするためのコード マップを作成します。 コメントをマップに追加することでバグの発見に重点を置いてコードの動作を追跡できます。

コード マップの呼び出し履歴を使用したデバッグ

要件:

参照: ビデオ: Debug visually with Code Map debugger integration (コード マップとデバッガーの統合により視覚的にデバッグする) (Channel 9) • Map the call stack • Make notes about the code • Update the map with the next call stack • Add related code to the map • Find bugs using the map • Q & A

呼び出し履歴でマップを作成する

  1. デバッグを開始します。 (キーボード: F5)

  2. アプリが中断モードになるか、関数にステップ インした後で、[コード マップ] を選択します (キーボード: Ctrl + Shift + `)。

    コード マップを選択して呼び出し履歴のマッピングを開始

    現在の呼び出し履歴は新しいコード マップ上にオレンジ色で表示されます。

    コード マップの呼び出し履歴を参照

    デバッグを継続している間、マップは自動的に更新されます。 「Update the map with the next call stack」を参照してください。

コメントをマップに追加する

コードの動作を追跡するためのコメントを追加します。 コメント内で新しい行を追加するには、Shift + Return キーを押します。

コード マップの呼び出し履歴にコメントを追加

次の呼び出し履歴でマップを更新する

アプリを次のブレークポイントまで実行するか、関数にステップ インします。 マップに新しい呼び出し履歴が追加されます。

次の呼び出し履歴でコード マップを更新

関連するコードをマップに追加する

マップを作成できたところで、次の作業に進みます。 Visual C# .NET または Visual Basic .NET で作業している場合は、フィールド、プロパティ、およびその他のメソッドなどの項目を追加して、コードの動作を追跡します。

メソッドをダブルクリックすると、そのコードの定義が表示されます (キーボード: マップでメソッドを選択して F12 キーを押す)。

コード マップのメソッドのコード定義に移動

マップで追跡する項目を追加します。

呼び出し履歴コード マップのメソッドのフィールドを表示

呼び出し履歴コード マップのメソッドに関連するフィールド

ここでは、同じフィールドを使用するメソッドを簡単に表示できます。 追加された最新の項目は緑色で表示されます。

コードのさらに多くの項目を表示するには、マップの作成を続けます。

フィールドを使用するメソッドを参照: 呼び出し履歴コード マップ

呼び出し履歴コード マップのフィールドを使用するメソッド

マップを使用してバグを見つける

コードの視覚化はバグをよりすばやく見つけるために役立ちます。 たとえば、描画プログラムのバグを調査しているとします。 直線を描画して元に戻そうとしても、別の直線を描画するまで何も起こりません。

そのため、ブレークポイントを設定し、デバッグを開始して、次のようなマップを作成します。

コード マップに別の呼び出し履歴を追加

マップ上のすべてのユーザー ジェスチャーが、undo を除いて、Repaint を呼び出していることがわかります。 この動作が原因で undo がすぐに実行されない可能性があります。

バグを修正してプログラムの実行を続けると、マップに undo から Repaint への新しい呼び出しが追加されます。

コード マップの呼び出し履歴に新しいメソッド呼び出しを追加

Q & A

  • 一部の呼び出しがマップに表示されません。 なぜでしょうか。

    既定では、ユーザー コードのみマップに表示されます。 外部コードを表示するには、[呼び出し履歴] ウィンドウでそのコードをオンにするか、Visual Studio のデバッグ オプションで [マイ コードのみを有効にする] をオフにします。

  • マップの変更はコードに影響を与えますか。

    マップを変更してもコードは何も影響を受けません。 マップでの名前変更、移動、削除は自由に行うことができます。

  • "ダイアグラムは古いバージョンのコードに基づいている可能性があります" というメッセージにはどのような意味がありますか。

    マップを最後に更新してからコードが変更されている可能性があります。 たとえば、マップ上の呼び出しがコードに存在しなくなった可能性があります。 メッセージを閉じてから、マップを再び更新する前にソリューションをリビルドしてみます。

  • マップのレイアウトは制御するには、どのようにしますか。

    マップのツール バーの [レイアウト] メニューを開きます。

    • 既定のレイアウトを変更します。

    • マップが自動的に再配置されないようにするには、[Automatic Layout when Debugging] (デバッグ時に自動的にレイアウトする) をオフにします。

    • 項目の追加時にマップが再配置される頻度をできる限り少なくするには、[インクリメンタル レイアウト] をオフにします。

  • マップを他のユーザーと共有できますか。

    マップをエクスポートし、Microsoft Outlook があれば、他のユーザーに送信できます。または、マップを独自のソリューションに保存し、Team Foundation バージョン管理にチェックインできます。

    呼び出し履歴コード マップを他のユーザーと共有

  • マップに新しい呼び出し履歴が自動的に追加されないようにするには、どのようにしますか。

    マップのツール バーで ボタン - コード マップの呼び出し履歴を自動的に表示 をクリックします。 マップに現在の呼び出し履歴を手動で追加するには、Ctrl + Shift + ` キーを押します。

    マップでは引き続き、デバッグ中にマップ上の既存の呼び出し履歴が強調表示されます。

  • 項目のアイコンと矢印にはどのような意味がありますか。

    項目に関する詳細情報を確認するには、項目のヒントを参照してください。 また、[凡例] を参照すると、各アイコンの意味を確認できます。

    呼び出し履歴コード マップのアイコンの意味

参照: Map the call stack • Make notes about the code • Update the map with the next call stack • Add related code to the map • Find bugs using the map