次の方法で共有


Visual Studio でのデバッグ中に呼び出し履歴のメソッドをマップする

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

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

必要なものは次のとおりです。

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

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

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

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

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

    コード マップでの呼び出し履歴の表示

    デバッグを続行すると、マップが自動的に更新されます。 「次の呼び出し履歴でマップを更新する」を参照してください。

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

コードで何が起こっているかを追跡するコメントを追加します。 コメントに新しい行を追加するには、 Shift キーを押しながら Return キーを押します。

コードマップでコールスタックにコメントを追加する

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

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

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

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

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

メソッドをダブルクリックしてコード定義を表示するか、メソッドのショートカット メニューを使用します。 (キーボード: マップ上のメソッドを選択し、 F12 キーを押します)

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

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

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

既定では、マップに項目を追加すると、クラス、名前空間、アセンブリなどの親グループ ノードも追加されます。 これは便利ですが、マップ ツールバーの [ 親を含める ] ボタンを使用してこの機能をオフにするか、アイテムを追加するときに Ctrl キー を押すことで、マップをシンプルに保つことができます。

コールスタックコードマップのメソッド関連フィールド

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

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

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

コールスタック コードマップでフィールドを使用するメソッド

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

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

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

コード マップに別のコールスタックを追加する

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

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

コード マップでスタックを呼び出す新しいメソッド呼び出しを追加する

Q&A(質疑応答)

  • すべての呼び出しがマップに表示されるわけではありません。 なぜでしょうか。

    既定では、マップには独自のコードのみが表示されます。 外部コードを表示するには、[ 呼び出し履歴 ] ウィンドウでオンにします。

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

    または、Visual Studio のデバッグ オプションで [ マイ コードのみを有効にする] をオフにします。

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

  • マップの変更はコードに影響しますか?

    マップを変更しても、コードには影響しません。 マップ上の任意の名前の変更、移動、または削除を自由に行えます。

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

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

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

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

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

    • マップの再配置を自動的に停止するには、[ デバッグ時に自動レイアウト] をオフにします。

    • 項目を追加するときにマップをできるだけ配置し直すには、[ 増分レイアウト] をオフにします。

  • マップを他のユーザーと共有することはできますか?

    マップをエクスポートしたり、Microsoft Outlook を使用している場合は他のユーザーに送信したり、ソリューションに保存してソース管理にチェックインしたりできます。

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

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

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

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

  • 項目のアイコンと矢印の意味

    項目に関する詳細情報を取得するには、その上にマウス ポインターを移動し、項目のヒントを確認します。 凡例を見て、各アイコンの意味を確認することもできます。

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

    参照:

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

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

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

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

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