2012-08-14 73 views
7

我主要是C和C++程序员,我经常需要快速理解非常大的代码库(gcc,linux内核)的结构。我想知道在这方面是否有任何工具可以提供帮助。我特别感兴趣的是调用图,整个项目中的数据结构引用,包括依赖关系图,快速符号位置等。我对ctags和cscope了解很多,但我正在寻找更多可视化的东西,例如调用图,以便快速定位定义的函数,在特定的调用上对图进行根,将其反转(即查找给定函数的所有调用)等。源代码浏览,理解和阅读工具

+0

RTCM - 阅读编译器手册。大多数编译器都会执行一些你想要的操作,我希望你使用的编译器也不例外。 – 2012-08-14 10:17:15

回答

0

请尝试使用SourceInsight。浏览代码并理解它非常有用。它提供了您所需的大部分功能。

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); 

什么,你需要做的就是定义这些功能,和写在你的逻辑中在那里产生调用图。

This extremely thorough tutorial说明如何使用-finstrument-functionsGraphViz生成呼叫图。所有涉及的工具都是FOSS和免费的。

当然:

  1. GraphViz的生产的图都是独立的,而不是一个IDE的一部分。
  2. 我不确定是否可以用这种方式生成Linux(内核)的调用图
0

你可以试试cflow。它给你一个里面函数的调用。虽然这不是很灵活。