8

我主要是一名 C 和 C++ 程序员,我经常需要快速理解非常大的代码库(gcc、linux 内核)的结构。我想知道在这方面是否有任何工具可以提供帮助。我对调用图、整个项目的数据结构引用特别感兴趣,包括依赖图、快速符号位置等。我知道 ctags 和 cscope,但我正在寻找更可视化的东西,比如允许快速定位定义的调用图函数,在特定调用处根图,反转它(即定位对给定函数的所有调用)等。

4

3 回答 3

5

如果您想构建调用图,您可以使用 GCC 的-finstrument-functions.

基本上,当您在启用该选项的情况下编译程序时,每当目标程序进入或退出函数时,GCC 都会调用以下函数:

      void __cyg_profile_func_enter (void *this_fn,
                                     void *call_site);
      void __cyg_profile_func_exit  (void *this_fn,
                                     void *call_site);

您需要做的是定义这些函数,并写入您的逻辑以在那里生成调用图。

-finstrument-functions这个非常详尽的教程解释了如何使用GraphViz生成调用图。所涉及的所有工具都是自由和免费的。

当然:

  1. GraphViz 生成的图表是独立的,而不是 IDE 的一部分。
  2. 我不确定是否可以通过这种方式生成 Linux(内核)的调用图。
于 2012-08-14T10:11:36.023 回答
0

你可以试试cflow。它为您提供了内部函数调用的概览。虽然它不是很灵活。

于 2012-08-14T10:54:47.743 回答
0

请尝试使用SourceInsight。这对浏览代码和理解代码很有帮助。它提供了您要求的大部分功能。

于 2012-08-14T10:04:19.073 回答