You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为多文件多入口的C++项目生成全局函数调用图

生成C++项目全局函数调用图的可行方案

方法一:调整Doxygen配置实现全局调用图

  • 打开Doxygen配置文件(通常为Doxyfile),修改以下核心参数:
    • EXTRACT_ALL = YES:确保所有函数(无论是否有文档注释)都被提取分析
    • CALL_GRAPH = YES 和 CALLER_GRAPH = YES:启用调用图与被调用图的生成逻辑
    • DOT_GRAPH_MAX_NODES = 1000:调大图节点上限,避免因节点过多被自动截断
    • GENERATE_HTML = YES:生成可交互的HTML文档
  • 生成文档后,在HTML页面的「Files」或「Globals」板块中,可找到包含全局函数调用关系的汇总视图,部分场景下会直接生成合并后的全局调用图。

方法二:使用CodeViz工具

CodeViz是专为C/C++项目设计的调用图生成工具,操作步骤如下:

  • 用GCC编译项目时,添加编译参数:-g -fdump-rtl-expand,生成RTL中间文件
  • 用cg_extract工具从RTL文件中提取函数调用关系数据
  • 用cg_dot将提取的数据转换为Dot格式的图文件
  • 用Graphviz的dot命令渲染为可视化文件:dot -Tpng callgraph.dot -o callgraph.png

方法三:基于Clang/LLVM工具链

利用Clang的AST分析能力生成全局调用图:

  • 使用现成工具clang-callgraph,直接扫描项目源码生成Dot文件:clang-callgraph -o callgraph.dot src/*.cpp
  • 再通过dot命令将Dot文件转换为PNG、PDF等格式的可视化图
  • 若需自定义分析规则,可编写简单的LLVM Pass遍历AST,提取函数调用关系后生成Dot文件

方法四:使用CppDepend工具

  • CppDepend支持C++项目的全量静态分析,导入项目后,在分析结果的「Call Graph」视图中可直接查看全局函数调用关系
  • 支持自定义过滤规则(如排除第三方库函数),并可将调用图导出为图片或Dot格式文件

内容的提问来源于stack exchange,提问作者zengjiaaaa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 08:34:56