【发布时间】:2009-01-17 19:34:07
【问题描述】:
任何代码分析或“逆向工程”工具都可以做到这些吗?:
- 计算哪些类是哪些类的子类
- 计算哪些类实例化哪些类 -- (如 VS Class Designer)
- 计算哪些函数调用哪些函数 -- (很像 调用堆栈)
【问题讨论】:
标签: oop function code-analysis
任何代码分析或“逆向工程”工具都可以做到这些吗?:
【问题讨论】:
标签: oop function code-analysis
计算哪些函数调用哪些函数
NDepend 可以生成一些有用的方法或类调用图,例如下面的屏幕截图(图片全尺寸here)免责声明:我是该工具的开发者之一 em>
找到更多关于how to generate call graph with NDepend here的解释。
计算哪些类是哪些类的子类
与 NDepend 生成类继承图的方式相同 (explanation to generate class inheritance graph here)。
计算哪些类实例化了哪些类
NDepend 让我们编写 代码查询 over LINQ 查询(我们称之为 CQLinq)。使用 CQLinq,您可以请求创建特定类的方法或类,例如:
from m in Methods
where m.CreateA("NUnit.Core.NUnitConfiguration")
select m
这样的 CQLinq 查询结果可以导出到图形视图,以获得依赖关系的可视化表示。
附带说明一下,使用 CQLinq 还可以编写代码规则。超过200 code rules是默认提出的,其中包括关于设计、架构、代码质量、代码演化的规则>、命名约定、死代码、.NET Fx 用法...
CQLinq 规则可以是verified live in Visual Studio,或者可以在构建过程中验证的reported in an HTML/javascript report。
【讨论】:
Doxygen + GraphViz (对于图片,doxygen 需要 GraphViz)
它具有最大的语言支持(因为您没有指定语言)并且查看器是浏览器,因此一旦生成,任何人都应该能够查看它。
配置 doxygen 以生成甚至未记录的成员,并包含源代码。这样,源代码将包含指向函数声明的链接,以便于导航。
还有专门针对某种语言的工具,例如Understand for C++。
【讨论】:
了解 2.0
...显示 依赖关系 在编写的部分代码之间 不同的语言。 CLA 成功 易于接听电话。 ~Combined Language Analysis
特别是这个Function Call tree 图像。
【讨论】: