次の方法で共有


デバッグ中に呼び出し履歴のビジュアル マップを作成する (C#、Visual Basic、C++、JavaScript)

デバッグ中に呼び出し履歴を視覚的にトレースするコード マップを作成します。 コードの実行内容を追跡するためにマップ上にメモを作成して、バグを見つけることに集中できます。

コード マップで使用できるコマンドとアクションの詳細については、「コード マップの 参照と再配置」を参照してください。

Important

コード マップは 、Visual Studio Enterprise エディションでのみ作成できます。

コード マップの概要を次に示します。

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

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

  1. Visual Studio Enterprise の C#、Visual Basic、C++、または JavaScript プロジェクトで、[デバッグ] メニューから [>デバッグの開始] を選択するか、F5 キーを押してデバッグを開始します。

  2. アプリが中断モードに入った後、または関数にステップ インしたら、[デバッグ] >[マップのコード化] を選択するか、Ctrl キー+Shift+` キーを押します。

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

    コード マップでコールスタックを表示する

デバッグを続行すると、コード マップが自動的に更新されます。 マップ項目またはレイアウトを変更しても、コードには影響しません。 マップ上の任意の名前の変更、移動、または削除を自由に行えます。

項目に関する詳細情報を取得するには、項目の上にマウス ポインターを置いて、項目のヒントを確認します。 ツール バーの [凡例 ] を選択して、各アイコンの意味を確認することもできます。

コード マップの凡例

この図は、コード マップの上部にある 古いバージョンのコードに基づいている可能性 があります。これは、マップを最後に更新した後にコードが変更された可能性があることを意味します。 たとえば、マップ上の呼び出しがコードに存在しなくなったとします。 メッセージを閉じてから、マップをもう一度更新する前に、ソリューションを再構築してみてください。

外部コードをマッピングする

既定では、マップには独自のコードのみが表示されます。 マップ上に外部コードを表示するには:

  • [呼び出し履歴] ウィンドウで右クリックし、[外部コードの表示] を選択します。

    [呼び出し履歴] ウィンドウ DebuggerMap_CallStackMenuを使用して外部コードを表示する

  • または、Visual Studio で [ マイ コードのみを有効にする ] チェック ボックスをオフにします。

    このオプションは、[ツール] (または [デバッグ] >[オプション] ウィンドウの [すべての設定]>[デバッグ]>General セクションで使用できます。

    Visual Studio で [マイ コードのみを有効にする] オプションを選択する方法を示すスクリーンショット。

    このオプションは、[ツール] (または [デバッグ]) ダイアログの > にあり、[デバッグ][全般] セクションで利用可能です。

    [オプション] ダイアログ DebuggerMap_DebugOptionsを使用して外部コードを表示する

マップのレイアウトを制御する

マップのレイアウトを変更しても、コードには影響しません。

マップのレイアウトを制御するには、マップ ツール バーの [レイアウト ] メニューを選択します。

[レイアウト] メニューでは、次のことができます。

  • 既定のレイアウトを変更します。
  • [デバッグ時に自動的にレイアウトする] の選択を解除して、マップの自動配置を停止します。
  • 項目を追加する際は、インクリメンタル レイアウトをオフにして、マップの再配置を最小限に抑えます。

コードに関するメモを作成する

コメントを追加して、コード内で何が起こっているかを追跡できます。

コメントを追加するには、コード マップを右クリックし、[ 編集]>[新しいコメント]を選択し、コメントを入力します。

コメントに新しい行を追加するには、Shift キーを押+Enter キーを押します。

コード マップで呼び出し履歴にコメントを追加する: DebuggerMap_AddComment

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

次のブレークポイントまたは関数へのステップにアプリを実行すると、マップによって新しい呼び出し履歴が自動的に追加されます。

次の呼び出し履歴を用いてDebuggerMap_AddClearCallStackでコードマップを更新する

マップで新しい呼び出し履歴が自動的に追加されないようにするには、[コード マップに呼び出し履歴を自動的に表示する] を選択し、コード マップ ツール バーでします。 マップは引き続き既存の呼び出し履歴を強調表示します。 現在の呼び出し履歴をマップに手動で追加するには、++ キーを押します。

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

これでマップが作成されました。C# または Visual Basic では、フィールド、プロパティ、その他のメソッドなどの項目を追加して、コード内で何が起こっているかを追跡できます。

コード内のメソッドの定義に移動するには、マップ内のメソッドをダブルクリックするか、選択して F12 キーを押すか、右クリックして [ 定義に移動] を選択します。

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

追跡する項目をマップに追加するには、メソッドを右クリックし、追跡する項目を選択します。最近追加された項目は緑色で表示されます。

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

既定では、マップに項目を追加すると、クラス、名前空間、アセンブリなどの親グループ ノードも追加されます。 この機能をオフまたはオンにするには、コード マップ ツール バーの [ 親を含める ] ボタンを選択するか、 Ctrl キー を押しながら項目を追加します。

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

さらに多くのコードを表示するには、マップの構築を続けます。

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

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

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

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

そのため、 clearundo、および Repaint メソッドにブレークポイントを設定し、デバッグを開始し、次のようなマップを作成します。

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

ユーザー ジェスチャーはすべてマップ上でRepaintを呼び出しますが、undoを除きます。 これにより、 undo がすぐに機能しない理由が説明される場合があります。

バグを修正してアプリの実行を続けた後、マップは undo から新しい呼び出しを Repaintに追加します。

コード マップ上のコールスタックに新しいメソッド呼び出しを追加 DebuggerMap_AddNewCallForRepaint

マップを他のユーザーと共有する

マップをエクスポートし、Microsoft Outlook で他のユーザーに送信し、ソリューションに保存して、バージョン管理にチェックインすることができます。

マップを共有または保存するには、コード マップ ツール バーの [共有 ] を使用します。

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