28

特定の C++ 関数の呼び出しグラフ (つまり、考えられるすべての実行パスをリストした図) を表示できる VS 用のツールがあるかどうか疑問に思っています。関数が数か所でしか呼び出されない場合に、大きなコード ベースをナビゲートするのに役立ちます。

よく呼び出される関数の場合は、次のようprintfに簡単に言えます。

選択肢が多すぎる…

繰り返しになりますが、そのようなツールを作成するのは本当に簡単ではないので、存在するのだろうかと思いますが、それが可能であるように見えるので、決して知りません... :)

編集:すべての参照を見つけることは知っていますが、関数を呼び出した関数を呼び出した関数の呼び出しサイトではなく、関数の呼び出しサイトのみを提供します...

編集: VS は 2010 ですが、必要に応じて VS2012 を選択できます。

4

8 に答える 8

20

あなたは、すべての参照を見つけることについて知っていると言いました。を表示することを検討しましたCall Hierarchyか? それはおそらくあなたの「夢の方法」ではありませんが、指定された関数の「呼び出し」と「からの呼び出し」の観点から関数を見ることができます。このウィンドウでは、複数の関数を追加してツリー形式で表示することもできます。したがって、基本的には、可能な結果を​​ツリーアップまたはツリーダウンします。

目的のメソッドを右クリックします (階層のどこにでもある可能性があります) =>

「呼び出し階層の表示」を選択します

ウィンドウに複数の参照点を追加できる場合は注意してください。必要に応じて削除

Ctrl+K または Ctrl+T を使用することもできます


C++ と C# と VS の違いに失望したもう 1 つの良い例です。Code Mapsはまさにあなたが探しているものだと思います。もちろん、Ultimate で作業していたと仮定しますが、C++ ではありません。

于 2013-06-27T09:52:16.223 に答える
12

私の知る限り、C++/MSVC にはそのような機能はありません。

ただし、(私の記憶が正しければ) コンパイル済みの実行可能ファイルをスキャンし、コール グラフを生成し、到達不能な関数を表示する「静的解析」オプションを備えた Windows 用の AQTime プロファイラーがあります。

私の記憶が正しければ、AQtime はビジュアル スタジオ (プロフェッショナル エディション、Afaik) に統合されます。

残念ながら、これは約 500 ドルの商用プロファイラーであり、この機能は試用版では利用できません。最後に静的分析を使用したのは 3..4 年前で、現時点では詳細を正確に覚えていません (そして、AQTime にはもうアクセスできません)。とにかく、これは専門的なツールなので、24 時間年中無休でコードを最適化する場合を除き、購入することはお勧めしません。

おそらく、「静的分析」や「コード カバレッジ」をグーグルで検索したり、他のプロファイラーを調べたりすると、無料でこの作業を行う似たようなツールを見つけることができるでしょう。

それとは別に、doxygen は C++ コードのコールグラフを生成できます。doxygen の場合、自分で呼び出されることのない関数を探す必要があります。

また、Visual Studio 2008 には、呼び出し元グラフ機能が組み込まれていました (これは、IntelliSense を使用していると思います)。基本的に、任意の関数を右クリックして「呼び出し元を表示」(またはそのようなもの) を選択すると、すべての関数のリストが開きます (Visual Studio THINKS が関数を呼び出しています)。この機能は VS2008 にあったため、VS2010 に含める必要があります。ただし、明らかな理由 (仮想メソッド、コールバックなど) により、すべての呼び出し元を検出できるわけではありません。

于 2013-06-27T19:16:53.140 に答える
7

多分 doxygen はあなたが探しているツールです。コール グラフ (特定の関数によって呼び出されるすべての関数を表示) および/または呼び出し元グラフ (関数が直接または間接的に呼び出される関数を表示) を生成する可能性を提供します。

参照: http://www.doxygen.nl/manual/diagrams.html

于 2013-06-27T11:13:37.123 に答える
3

理解ツール ( http://www.scitools.com ) をご覧ください。コール グラフや制御フロー チャートを描くのに最適です。残念ながら商用です。

于 2013-07-03T09:04:02.573 に答える
3

シンボル検索を実行した後、結果を解決できます。ソースを右クリックして、シンボル検索を実行するすべての参照を検索を選択します。詳細については、http://blogs.msdn.com/b/vcblog/archive/2009/11/17/improvements-to-find-all-references-in-visual-studio-2010.aspxで説明されています。

于 2013-07-04T05:27:16.710 に答える
1

Source Navigator は、私が C++ プロジェクトで使用し、非常に満足しているツールです。繰り返しますが、これは Visual Studio IDE 内にはありませんが、Alt-Tab を押してもかまわない場合、いくつかの大きな利点があります :-)

  • C と C++ の両方のソースで動作します
  • インデックス作成と検索が非常に高速です。使用するのは楽しいです、私見
  • ビジュアルツールです
  • 無料のオープンソースツールです

スクリーンショットについては、 http://sourcenav.berlios.de/screenshots/を参照してください。

特に、 Cross-Reference Browserを探しています:

「関数のすべての呼び出しを見つけたり、特定の関数が呼び出すすべてを教えたりすることができます。関数呼び出し階層ツリーなど、プロジェクトのシンボル データベース内の重要な関係を示すツリー ダイアグラムを作成します。階層ツリーを上下にトラバースできます。 , ツリーを展開または制限します. 階層内のアイテムを選択し, 参照元および参照元の関係を表示できます. これらの関係は選択したシンボルの「視点」に基づいています.

このチュートリアルのスクリーンショットの例「クロスリファレンス ブラウザの使用」では、関数ではなくクラスの参照元関係 (赤い矢印を使用) を示していますが、後者の使用例は非常に似ています。また、関数からどの関数/メソッドが呼び出されているかを参照することもできます。これは参照先の関係であり、赤ではなく青の矢印を使用して示されます。

ここに画像の説明を入力

試してみてください!前に述べたように、私はこのツールの満足のいくユーザーです。あまり知られていませんが、優れたソフトウェアです (これは、Tcl/Tk が適切な人にとっていかに有用であるかを示す例でもあります)。

于 2013-10-21T12:01:51.953 に答える