次の方法で共有


コード マップを使用してアプリケーションをデバッグする

Visual Studio でコード マップを使用すると、大規模なコード ベース、よく知らないコード、またはレガシ コードでの見失いを回避できます。 たとえば、デバッグの際は、多数のファイルとプロジェクトにわたってコードに注意を払うことが必要になる場合があります。 コード マップを使用すると、これらのコード内を移動して、コード間の関係を確認できます。 これにより、このコードを頭の中で追跡したり、別の図を描画したりする必要はありません。 コード マップがあれば、作業を中断しても作業中のコードを思い出すのに役立ちます。

Code map - Map relationships in code

緑色の矢印は、エディターでカーソルが表示される場所を示します。

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

デバッガー ツールで Visual Studio をデバッグする方法をこちらでご覧ください。

Note

コード マップの作成および編集には、Visual Studio Enterprise エディションが必要です。 Visual Studio Community および Professional エディションでは、Enterprise エディションで生成されたダイアグラムを開くことはできますが、編集することはできません。

問題を把握する

作業中の描画プログラムにバグがあるとします。 バグを再現するために、Visual Studio でソリューションを開き、F5 キーを押してデバッグを開始します。

直線を描画し、[最後のストロークを元に戻す] を選択しても、次の直線を描画するまで何も起こりません。

Code map - Repro bug

したがって、Undo メソッドを検索して調査を開始します。 PaintCanvas クラスでこれが見つかります。

Code map - Find code

コードのマップを開始する

ここで、undo メソッドとその関係のマップを開始します。 コード エディターで、undo メソッドとその参照するフィールドを、新しいコード マップに追加します。 新しいマップを作成するときは、コードにインデックスを付けるのに時間がかかる場合があります。 インデックスを付けることで、後の操作をより速く実行できるようになります。

Code map - Show method and related fields

ヒント

緑色の強調表示は、マップに追加された最後の項目を示します。 緑色の矢印は、コード内でのカーソルの位置を示します。 項目間の矢印は、さまざまな関係を表します。 マップの項目に関する詳細情報は、項目の上にマウスを移動してツールヒントを調べることで確認できます。

Code map - Show tooltips

各フィールドのコード定義を確認するには、マップのフィールドをダブルクリックするか、フィールドを選択して F12 キーを押します。 緑色の矢印がマップの項目間を移動します。 コード エディターのカーソルも自動的に移動します。

Screenshot of a code map window with the history field selected and a code editor window where all instances of history are highlighted.

Screenshot of a code map window with the paintObjects field selected and a code editor window where all instances of paintObjects are highlighted.

ヒント

また、コード エディターでカーソルを動かすと、マップの緑色の矢印を移動できます。

コード間のリレーションシップを把握する

ここで、他のどのコードが history フィールドおよび paintObjects フィールドとやり取りしているのかを把握する必要があります。 これらのフィールドを参照するすべてのメソッドをマップに追加できます。 この操作は、マップまたはコード エディターから行うことができます。

Code map - Find all references

Open a code map from the code editor

Note

Windows Phone や Windows ストアなどの複数のアプリで共有されるプロジェクトから項目を追加すると、それらの項目は常に、現在アクティブなアプリ プロジェクトと共にマップに表示されます。 そのため、コンテキストを別のアプリ プロジェクトに変更すると、マップ上のコンテキストも、共有プロジェクトから新たに追加した項目に変更されます。 マップ上の項目に実行する操作は、同じコンテキストを共有する項目にのみ適用されます。

関係のフローを再配置してマップを読みやすくするために、レイアウトを変更します。 項目をドラッグすることにより、マップ上で項目を移動することもできます。

Screenshot of a code map window with the Layout menu open and the Left to Rgiht command selected.

ヒント

既定では、[インクリメンタル レイアウト] が有効になっています。 この設定では、新しい項目の追加時にマップの再配置は最小限に抑えられます。 新しい項目を追加するたびにマップ全体を再配置するには、[インクリメンタル レイアウト] を無効にします。

Screenshot of a code map window with the relationshiop arrows between the fields pointing from left to right.

これらのメソッドを調べます。 マップで、[PaintCanvas] メソッドをダブルクリックするか、このメソッドを選択して F12 キーを押します。 このメソッドにより、historypaintObjects が空のリストとして作成されることがわかります。

Screenshot of a code map window with the PaintCanvas method selected and a code snippet image showing the PainCanvas method name highlighted.

ここで、同じ手順を繰り返して、clear メソッドの定義を調べます。 clearpaintObjectshistoryを使用して一部のタスクを実行することがわかります。 次に、このメソッドは Repaint メソッドを呼び出します。

Screenshot of a code map window with the Clear method selected and a code snippet image showing the code for the Clear method.

ここで、addPaintObject メソッドの定義を調べます。 このメソッドも、historypaintObjects を使用して一部のタスクを実行します。 また、このメソッドは Repaint を呼び出します。

Screenshot of a code map window with the addPaintObject method selected and a code snippet image showing the code for the addPaintObject method.

マップを調べて問題を見つける

historypaintObjects を変更するすべてのメソッドが Repaint を呼び出すと考えられます。 ただし、undo メソッドは Repaint を呼び出しませんが、undo メソッドは同じフィールドを変更します。 したがって、Repaintundo を呼び出すことにより、この問題を解決できると考えられます。

Code map - Find missing method call

この失われている呼び出しを示すマップがない場合、特にコードが複雑になると、この問題を見つけることがより困難になる可能性があります。

探索と次のステップを共有する

自分または他のユーザーがこのバグを修正する前に、問題と問題の解決方法に関するメモをマップに記載できます。

Code map - Comment and flag items for followup

たとえば、マップにコメントを追加し、色を使用して項目にフラグを設定できます。

Code map - Commented and flagged items

Microsoft Outlook をインストール済みの場合は、他のユーザーに電子メールでマップを送信できます。 マップをイメージまたはその他の形式でエクスポートすることもできます。

Code map - Share, export, mail

問題を修正して操作内容を表示する

このバグを修正するには、Repaintundo の呼び出しを追加します。

Code map - Add missing method call

修正を確認するには、デバッグ セッションを再開して、バグの再現を試みます。 ここで、[最後のストロークを元に戻す] を選択すると、期待どおりに機能し、正しい修正を行ったことが確認されます。

Code map - Confirm code fix

マップを更新すると、実行した修正を示すことができます。

Code map - Update map with missing method call

マップには、undoRepaint の間のリンクが示されます。

Code map - Updated map with method call

Note

マップを更新するときに、マップの作成に使用したコード インデックスが更新されたことを示すメッセージが表示される場合があります。 これは、他のだれかがコードを変更し、マップが現在のコードに一致しなくなっていることを意味します。 このことでマップの更新が停止されることはありませんが、コードとの一致を確認するためにマップを作成し直すことが必要になる場合があります。

これで調査が終了しました。 コードのマップにより、問題を正常に検出して修正しました。 また、コード内を移動することや確認したことの記憶に役立ち、問題を解決するための手順を示すマップも備わりました。