C++项目的依赖关系图






4.17/5 (5投票s)
2002年4月18日
2分钟阅读

215558

2993
一个用 VB.NET 编写的插件,用于生成 C++ 项目的继承和/或依赖关系图。 使用 AT&T 的 graphviz 库。
描述
ClassDep 是一个插件,用于生成 JPEG 或 JPG 图像,显示 Visual Studio 中 C++ 项目的继承和/或依赖关系图。 它使用 http://www.research.att.com/sw/tools/graphviz/ 中的 graphviz 工具。 上面的图片显示了我其中一个项目生成的依赖关系图。
安装
只需双击 msi 文件并按照安装说明操作即可。 graphviz 库中的所有文件都包含在 msi 文件中。
用法
要使用此插件,只需单击 Visual Studio .NET 的“工具”菜单中的 ClassDep-Entry。 它仅适用于 C++ 项目(不支持 C# 和 VB)。 生成的图片文件存储在相应的项目文件夹中,名称为 projectdep.jpg 和/或 projectdep.png。 请注意,对于大型项目,图片文件可能会变得非常大!
实现
为了生成继承/依赖关系图,通常需要解析源代码。 但您肯定已经注意到 Visual Studio 在“类视图”窗口中完成了这项工作 - 它显示了所有项目类的基类和成员。 所以我想知道我是否以及如何将 Visual Studio 的这个内置功能用于我的需求。 DTE 对象是完美的解决方案
Dim applicationObject As EnvDTE.DTE
Dim project As Project
For Each project In applicationObject.ActiveSolutionProjects()
'...
'read out all c++-related object in the current project
BuildObjectList(project.CodeModel.CodeElements, 0)
For Each cl In project.CodeModel.CodeElements
If (cl.Kind = vsCMElement.vsCMElementClass) Then
'cl is a class
ScanBases(cl, 0) 'scan all base classes/structs
depfile.WriteLine(";")
If (ob.dependency.Checked) Then
ScanDependencies(cl) 'also scan all dependencies of the class
End If
End If
Next
'...
我首先从宏开始,然后决定切换到插件,因为安装更容易。 这就是为什么这个插件是用 VB 编写的。
插件的一个问题是,我不知道如何获取插件 dll 的安装路径。 这也是 graphviz 文件安装的路径,我需要知道它才能使用这些文件。 我知道的唯一方法是使用注册表。 所以安装 msi 也会用安装路径写入注册表条目
Dim dotdir As String
dotdir = Registry.LocalMachine.OpenSubKey( _
"Software\Microsoft\VisualStudio\7.0\AddIns\ClassDep.Connect", _
False).GetValue("instpath", " ")
最后是调用 graphviz 工具
If ob.outjpeg.Checked Then
'call the graphviz tool with required params to generate the jpeg
Shell(dotdir + "\dot.exe -Tjpg """ + dir + "dep.txt"" -o """ + dir +_
project.Name + "dep.jpg""", AppWinStyle.MinimizedFocus, True)
End If
If ob.outpng.Checked Then
Shell(dotdir + "\dot.exe -Tpng """ + dir + "dep.txt"" -o """ + dir +_
project.Name + "dep.png""", AppWinStyle.MinimizedFocus, True)
End If
结论
还有很多改进的余地,比如更好地排序依赖关系图等等。 你们中的一些人可能会觉得这些颜色很糟糕 - 随意更改 :-)
我还在 msi 安装程序中包含了 graphviz 文件。 据我所知,graphviz 的许可证允许这样做 - 如果我错了,请给我发邮件。
如果有人知道如何更改菜单项中那个丑陋的笑脸图标,请告诉我!
历史
2002 年 7 月 9 日 - 更新了安装程序下载。
2002 年 7 月 15 日 - 修复了 Brian D Pearson 发现的未捕获异常错误