Share via


方法: C コードおよび C++ コードに対する依存関係グラフを生成する

この Visual Studio 2010 Feature Pack では、Visual Studio 2010 Ultimate で依存関係グラフを生成することで、C および C++ のコード内の編成や関係を視覚化できます。 これらのグラフは、ソース コード内、バイナリ ファイル間、およびソース ファイルとヘッダー ファイルの間の依存関係を調べて、理解し、管理するのに役立ちます。 たとえば、バイナリ ファイル、名前空間、およびクラスの間の依存関係を表示できます。 グラフでは、コード要素とその関係を、リンク (エッジ) によって接続されている一連のノードとして表します。 詳細については、「Visual Studio Feature Pack」を参照してください。

重要

この機能を使用するには、Visual Studio 2010 Feature Pack をインストールする必要があります。

Visual C または Visual C++ プロジェクトでこのタスクを実行するには、Visual Studio で Visual C# がインストールされている必要があります。

C および C++ のコードのグラフを生成するときは、次の点に注意してください。

  • C および C++ のプロジェクトを含むソリューションを開くときは、IntelliSense 参照データベースの更新に時間がかかる場合があります。 この間、ソース ファイルおよびヘッダー ファイルの依存関係グラフを生成するためのコマンドは使用できません。

    注意

    IntelliSense データベースの更新が完了するまで待ってから、これらのファイルの依存関係グラフを生成してください。 これらの更新の進行状況は、Visual Studio のステータス バーで監視できます。 IntelliSense の特定の設定が無効であるために表示されるメッセージの詳細については、「トラブルシューティング」を参照してください。

  • ユーザー インターフェイスでは、"アセンブリ" という用語は "バイナリ" の意味で使用されます。 たとえば、ソリューション内のすべてのバイナリ ファイル間の依存関係を表示するには、[アーキテクチャ] メニューの [依存関係グラフの生成] をポイントし、[アセンブリ別] をクリックします。

    注意

    バイナリ ファイルの場合、グラフではバイナリ レベルのみの依存関係が示されます。 たとえば、メソッドの呼び出しや参照型など、同じバイナリ内の依存関係は表示されません。

  • C および C++ のコードに対して生成されるグラフ ドキュメントの既定の名前は、"AssemblyDependenciesN.dgml" です。N は、ドキュメントのバージョン番号です。 このドキュメント名はいつでも変更できます。

  • Visual Studio ソリューション全体または特定のアイテムの依存関係グラフを生成できます。

    注意

    非常に大きなソリューションで依存関係グラフを生成すると、すべてのファイルの解析に時間がかかる場合や、メモリ不足例外が発生する場合があります。 その場合は、ソリューションのスコープを小さくするか、アーキテクチャ エクスプローラーを使用して特定の要素と関係を選択してから、グラフを生成してください。

  • C および C++ コードの依存関係グラフを生成する手順は、.NET コードの場合と同じです。 詳細については、「方法: .NET コードに対する依存関係グラフを生成する」を参照してください。

C または C++ のコードの依存関係グラフを生成するときに発生する可能性のある問題については、「トラブルシューティング」を参照してください。

ソース ファイルとヘッダー ファイルの間の依存関係の表示

C および C++ のソース ファイルとヘッダー ファイルの間の依存関係を視覚化できます。 以下のスコープの依存関係を選択して視覚化できます。

ネイティブ コードの依存関係グラフ

C++ プロジェクトに含まれるファイルの依存関係グラフ

  • ソリューション内のすべてのソース ファイルとヘッダー ファイル

  • 現在開いているファイルと、すべての第 1 レベルのソース ファイルとヘッダー ファイル

表示する依存関係の対象

手順

ソリューション内のすべてのソース ファイルとヘッダー ファイル

[アーキテクチャ] メニューの [依存関係グラフの生成] をポイントし、[By Included File] (含まれるファイル別) をクリックします。

メモメモ
このコマンドを初めて実行すると、Visual Studio は C または C++ のプロジェクト ファイルを分析する必要があります。この処理には、時間がかかることがあります。グラフの生成を取り消すには、表示されるメッセージ ボックスで [キャンセル] をクリックします。

現在開いているファイルと、すべての第 1 レベルのソース ファイルとヘッダー ファイル

ヒントヒント
他のレベルの依存関係を表示するには、グラフ ツール バーの [隣接参照モード] を使用して、表示する依存関係のレベルを選択します。詳細については、「方法: グラフ ドキュメントを参照および操作する」を参照してください。
  1. ソース ファイルまたはヘッダー ファイルを開きます。

    コード エディター ウィンドウでファイルが開かれます。

  2. ファイル内の任意の場所を右クリックし、[Generate Graph for Included Files] (含まれるファイルのグラフの生成) をクリックします。

.h ファイルの第 1 レベル依存関係グラフ

ヘッダー ファイルと第 1 レベルのソース ファイルおよびヘッダー ファイルの依存関係グラフ

トラブルシューティング

C または C++ のコードの依存関係グラフを生成するときは、次の問題が発生する場合があります。

懸案事項

原因

解決策

[アーキテクチャ] メニューから依存関係グラフを生成しようとすると、Visual Studio が応答しなくなる。

プログラム データベース (.pdb) ファイルが壊れている可能性があります。

.pdb ファイルには、型、メソッド、ソース ファイル情報などのデバッグ情報が格納されます。

詳細については、「プログラム データベース ファイル (C++)」を参照してください。

ソリューションを再度ビルドしてから、もう一度実行します。

IntelliSense 参照データベースの特定の設定が無効になる。

IntelliSense の特定の設定が、Visual Studio の [オプション] ダイアログ ボックスで無効になっている可能性があります。

設定をオンにして有効にします。

詳細については、「[詳細] ([オプション] ダイアログ ボックス - [テキスト エディター] - [C/C++])」を参照してください。

"不明なメソッド" という内容のメッセージがメソッド ノードで表示される。

この問題は、メソッドの名前を解決できないために発生します。

バイナリ ファイルにベース再配置テーブルがない可能性があります。

リンカーで /FIXED:NO オプションをオンにします。

詳細については、「/FIXED (固定ベース アドレス)」を参照してください。

x86 アーキテクチャで稼働するバイナリ ファイルだけがサポートされます。

プログラム データベース (.pdb) ファイルがビルドされていない可能性があります。

.pdb ファイルには、型、メソッド、ソース ファイル情報などのデバッグ情報が格納されます。

詳細については、「プログラム データベース ファイル (C++)」を参照してください。

リンカーで /DEBUG オプションをオンにします。

詳細については、「/DEBUG (デバッグ情報の生成)」を参照してください。

予想される場所で .pdb ファイルを開くことができないか、ファイルが見つかりません。

.pdb ファイルが予想される場所にあることを確認します。

デバッグ情報が .pdb ファイルから取り除かれています。

/PDBSTRIPED オプションをリンカーで使用した場合は、代わりに完全な .pdb ファイルを使用します。

詳細については、「/PDBSTRIPPED (プライベート シンボルの除去)」を参照してください。

呼び出し元が関数ではなく、バイナリ ファイル内のサンクまたはデータ セクション内のポインターです。

呼び出し元がサンクの場合は、_declspec(dllimport) を使用してサンクの回避を試みます。

詳細については、次のトピックを参照してください。

参照

概念

既存のコードの視覚化

その他の技術情報

方法: グラフ ドキュメントを参照および操作する

方法: 依存関係グラフを使ってコードを調べる

方法: グラフ ドキュメントを編集およびカスタマイズする