Visual StudioでのC ++ファイルの#include階層の表示


169

問題: Visual Studio 2010に移行しようとしている大規模なVisual C ++プロジェクトがあります。これは、さまざまなソースやさまざまな年齢のものが非常に混在しています。との両方が含まれているため、問題が発生winsock.hしていwinsock2.hます。

質問:表示するためのツールとテクニックは何ですか#include Visual Studio C ++ソースファイルの階層をますか?

cl /Pはプリプロセッサ出力を取得することについて知っていますが、それはどのファイルに他のどのファイルが含まれているのかを明確に示していません(この場合、/P出力は376,932行です8-)

完璧な世界では、ソースにジャンプできるように、どのファイルに他のどのファイルが含まれているか、行番号とともに階層表示したいのですが。

source.cpp(1)
  windows.h(100)
    winsock.h
  some_other_thing.h(1234)
    winsock2.h

2
GCC / Clangソリューションを探す人は、を使用gcc -H -fsyntax-only ...して階層を出力します。stackoverflow.com/a/18593344/427545
Lekensteyn 2018

回答:


234

設定があります:

プロジェクト設定->構成プロパティ-> C / C ++->詳細設定->インクルードを表示

ツリーが生成されます。コンパイラスイッチにマップします/ showIncludes


20
注:階層は[出力]ウィンドウに表示されます。
CannibalSmith、

3
誰かが興味を持っている場合:Clang プラットフォームツールセットを選択した場合でも、追加する-Hと「インクルードを表示」できますC/C++ -> Command Line - Additional Options
wip

3
それでも、コンパイル時エラーに関連する直接インクルード階層を示し、行番号も表示するgccの「インクルード元」機能ほど優れていません。
ポール、

2
Visual Studioのインクルード(Program Files(x86)の下にあるもの)を取り除く簡単な正規表現を作成しました。あなたは+コピー++メモ帳などのアプリにあなたの出力ウィンドウを貼り付け、正規表現検索を行うと、すべてのVSは、あなたの木から含ま取り除くために、空白で置き換えることができます1>\s*Note: including file:\s*C:\\Program Files \(x86\).*(\r\n|\n|$)
kjhf

2
/ showIncludesは個々のソースファイルに対して切り替えることができますが、/ showIncludesがプロジェクトレベルで設定されていない場合は効果がないことに注意してください。
David Carr 2017

20

コンパイラーは/ showIncludesスイッチもサポートしています。これは行番号を提供しませんが、どのインクルードがどこから来ているのかをかなり包括的に表示できます。

これは、[プロジェクトの設定]-> [構成プロパティ]-> [C / C ++]-> [詳細設定]-> [インクルードを表示]にあります。


+1ありがとうございます!(しかし、xtoflは、Acceptが速くなることを恐れています)。
RichieHindle、2009

17

IncludeManagerは非常に強力なツールであることがわかりました。これは無料ではありませんが(高価ではありません)、インクルードの問題を把握し、使用していないインクルードの大きなチャンクを削除することで、コンパイル時間を50分から8分に短縮できました。


5
うわー!問題のあるファイルに対してIncludeManagerを実行したところ、グラフが生成され、大声で笑いました。私の計算では、全体を見るには400
インチの

2
更新-IncludeManagerの親会社であるProFactor(www.profactor.co.uk)は廃業しましたが、最新のリリースを上記のWebサイトから無料で提供しています。欠点は、VS2005からVS2013までのVisual Studioのフルバージョンでのみ機能することです。
Dana

5

gccの階層的なインクルード機能ほど良くありません。エラーの場合に直接ラインの包含階層を示します。VSの「show include」オプションはすべてを表示しますが、これは階層的なインクルードファイルの問題をデバッグする場合には過剰です。


私はこれをmingwで使用した5年前から待っています。
架空の話

2
おそらく、ドキュメントの場所など、使用方法の詳細を追加しますか?この答えは、現時点ではあまり追加されません。
Sam Brightman、

4

以下は、サードパーティの優れたFOSSツールです。結果をXMLにエクスポートできます。これには、発生数と行番号に関するデータが含まれます。


4

IncludeToolboxと呼ばれるVisual Studioのプラグインがあります。依存するインクルードをリストし、ランダムな削除やコンパイルなどの多くのことを実行して、そのインクルードが必要かどうかを確認できます。



2

cl / Pを実行すると行番号が表示されるので、ヘッダーファイルのインクルード元のコンテキストを確認できます。

あなたが行をグレップすると...

grep "^#line" file.i

...次に、プリプロセッサによって順番に検出されたファイルを明確に示す必要があります。

1回限りのインシデントの場合、これはかなり迅速な診断になるはずです。


2
確かに、しかしそれは私に階層のない非構造化出力の8000行を与えます。
RichieHindle 2009

私はかなり長い間cl / Pの出力を調べていましたが、その仕事により適したツールがあるかどうか疑問に思いました。今、私はそれが素晴らしいことを発見しました。質問一般的であり、答えは他の人が見つけることができるように永遠にここにあります。
RichieHindle 2009

0

私はDoxygenGraphVizを使用しています。

ここに画像の説明を入力してください

両方をインストールします。階層図を生成するツールとしてGraphVizを選択してください。「GraphVixパッケージのドットツールを使用する」を選択します。

また、GraphVizからのバイナリディレクトリがPATH環境変数に含まれていることを確認してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.