C++可通过逆向工程工具从源码生成UML类图,主流方案包括Doxygen+Graphviz(推荐入门)、CppDepend(商业)、StarUML(需插件)和PlantUML+自定义解析器;需注意模板、宏、头文件路径及语义标注等限制。

C++ 本身不直接生成 UML 图,但可通过逆向工程工具,从现有 C++ 源码或二进制中提取类结构、继承关系、成员函数和依赖等信息,自动生成类图(Class Diagram)等 UML 图形。关键在于选择支持 C++ 解析、符号识别和可视化输出的工具。
支持 C++ 的主流逆向 UML 工具
以下工具可解析 C++ 代码并导出标准 UML 类图(部分支持序列图、包图等),多数免费或开源:
-
Doxygen + Graphviz:最常用组合。Doxygen 提取代码结构(类、继承、成员、调用关系),Graphviz 渲染为 PNG/SVG 类图。需配置
EXTRACT_ALL = YES、UML_LOOK = YES、CALL_GRAPH = YES等选项,适合中小型项目。 - CppDepend:商业工具(提供免费试用版),深度解析 C++ 项目(含模板、宏、跨文件依赖),一键生成交互式类图、依赖矩阵、度量报告。对现代 C++(C++17/20)支持较好。
- StarUML(配合插件):通过第三方插件(如 Code Engineering 或自定义脚本)导入 C++ 头文件,生成基础类图。原生支持有限,适合简单头文件结构,需手动补全关系。
-
PlantUML + 自定义解析器:用 Python/C++ 脚本(如 pycparser 或 libclang)解析源码,生成 PlantUML 文本(
@startuml ... class A { +int x; } ... @enduml),再由 PlantUML 渲染成图。灵活可控,适合定制化需求。
推荐入门方案:Doxygen + Graphviz(零成本、稳定)
步骤简洁,适合大多数 C++ 项目:
- 安装 Doxygen(官网或包管理器:
sudo apt install doxygen/brew install doxygen)和 Graphviz(sudo apt install graphviz) - 在项目根目录运行
doxygen -g生成默认配置文件Doxyfile - 编辑
Doxyfile,启用关键选项:EXTRACT_ALL = YESUML_LOOK = YESCALL_GRAPH = YESCOLLABORATION_GRAPH = YESCLASS_DIAGRAMS = YESGENERATE_HTML = YES(或GENERATE_XML = YES配合其他工具) - 运行
doxygen,生成文档目录;html/class_*.html中即嵌入 SVG 类图
注意事项与常见问题
C++ 逆向生成 UML 的难点在于语言特性复杂性,需注意:
立即学习“C++免费学习笔记(深入)”;
- 模板类(
std::vector)可能被展开为具体实例,或显示为泛型占位符,取决于工具解析能力 - 宏定义(如
Q_OBJECT)、预处理器指令会影响解析,建议先清理或禁用无关宏 - 未包含完整头文件路径时,Doxygen 可能无法识别外部依赖类,需设置
INCLUDE_PATH - 纯虚函数、多重继承、友元关系等语义信息,部分工具仅以图形连接表示,不标注语义标签(如 «interface» 或 «virtual»)
替代思路:IDE 内置功能辅助
部分 IDE 提供轻量级可视化支持,虽非标准 UML,但可快速浏览结构:
- Visual Studio:右键类 → “查看类图”(Class Diagram),支持拖拽生成静态类视图(仅限当前解决方案内)
- CLion:Structure 视图 + 插件(如 Code Iris)可显示类间调用热力图与简化关系图
- VS Code:配合 C/C++ Extension 和 PlantUML Preview,手动写简化的 PlantUML 类图,适合重点模块速绘











