我主要是C和C++程序员,我经常需要快速理解非常大的代码库(gcc,linux内核)的结构.我想知道在这方面是否有任何工具可以提供帮助.我对调用图,整个项目的数据结构参考,包括依赖图,快速符号位置等特别感兴趣.我知道ctags和cscope,但我正在寻找具有更多可视化的东西,如调用图,可以快速定位定义函数的一部分,在特定的调用中根图形,反转它(即定位对给定函数的所有调用),等等.
如果你想建立一个呼叫图,你可以用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);
Run Code Online (Sandbox Code Playgroud)
您需要做的是定义这些函数,并在您的逻辑中写入以在那里生成调用图.
这个非常全面的教程解释了如何使用-finstrument-functions和GraphViz生成调用图.所涉及的所有工具都是FOSS和免费提供的.
当然: