CodeViz 是一款面向 C/C++ 源代码的**函数调用关系图(call graph)**生成工具,由《Understanding The Linux Virtual Memory Manager》作者 Mel Gorman 开发并开源。它定位为资深开发者、内核贡献者以及大型维护团队提供代码结构可视化能力,核心价值在于将杂乱无章的源文件调用关系转化为直观的图形,帮助开发者在数万行代码中快速定位函数间的依赖与路径。
核心功能
- 函数调用关系采集:通过对 GCC 编译器打补丁,在编译每个源文件时自动提取函数间的调用信息,并以文本形式记录,确保采集过程与编译流程深度耦合,不遗漏任何隐式调用。
- 调用图生成:将采集到的调用关系数据传递给 Graphviz 引擎,自动输出可视化的有向图(如 SVG、PNG 格式),图中节点代表函数,边代表调用方向,层次清晰。
- 深度控制与过滤:支持通过命令行参数限制调用图的层级深度,避免生成过于庞大的全量图;同时允许按函数名、文件路径等条件过滤节点,聚焦核心逻辑。
- 批处理与增量更新:针对大型项目(如 Linux 内核),CodeViz 可以一次性分析整个编译过程生成的调用关系文件,并支持在部分代码修改后重新生成增量图,而非全量重算。
- 多平台兼容:基于标准 GCC 工具链,可运行在 Linux、macOS 等 Unix-like 系统上,对交叉编译环境同样适用,广泛用于嵌入式系统代码分析。
- 输出格式灵活:除了直接生成图形文件,还能输出 DOT 等中间格式,供开发者二次定制样式或集成到文档工具中。
适用人群
主要面向需要深入理解或重构 C/C++ 大型项目的软件工程师,典型场景包括:阅读 Linux 内核、nginx、MySQL 等经典开源代码库的调用逻辑;在代码审计或性能调优中追踪关键函数的前后路径;以及帮助新加入团队的开发者快速建立代码心智模型。对于使用 Doxygen 配合 Graphviz 的老用户,CodeViz 提供了更专注的函数级调用分析能力,尤其适合那些不依赖 IDE 或需要离线分析的终端工作流。
自发布以来,CodeViz 被多个大型 C/C++ 项目社区采纳为代码理解的标准辅助工具,与 egypt、ncc 等同类工具相比,它的优势在于对 GCC 编译过程的深度集成,能捕捉到宏展开、内联函数等复杂场景下的调用关系。该工具完全开源免费,无需商业授权,适合个人开发者与企业团队按需部署。若你已经熟悉 Graphviz,只需安装补丁版本的工具链即可在一分钟内在任意源码目录生成第一张调用关系图。