反向工程C ++的工具(即查看C ++类)

时间:2011-11-29 14:22:49

标签: c++ webkit reverse-engineering

我有大量手写的C ++源代码(即WebKit和其他开源代码)。

我想要一个工具:

  • 让我看看每个班级和班级的班级间关系:
    • 包含关系:即哪个其他类包含此类,或者包含在哪个类中(头文件将模板化的智能指针类型声明为成员数据)
    • 声明的依赖关系(即在方法签名中使用类型;虽然我可以使用'在文件中查找'看得很清楚)
    • 子类和超类层次结构
  • 在Windows或Linux(甚至是基于Web的解决方案)上运行
  • 最好有一个用户界面(或者说太多了?)
  • 可选择是IDE中的插件

与相关问题C++ to UML (Reverse engineer / Round-trip engineering)不同,我不需要它:

  • 解析定义/实现(cpp和c文件)
  • 支持编辑或“往返”源

相反,解析应用程序和系统头文件(包括模板类型和typedef)中的类型声明就足够了。我有所有头文件的列表。

我更喜欢它,如果它可以处理预处理器定义(尤其是#include和#if),但我可以预处理,如果这是必要的;和/或以各种格式制作或制作文件。

2 个答案:

答案 0 :(得分:2)

你总是可以使用doxygen,它会为你提供关于你的标题集的完整文档(继承,用法......)它还可以从类层次结构中生成图形。

答案 1 :(得分:1)

另一种可能性是自定义您自己的工具,通过扩展现有的C ++编译器

您可以扩展两个编译器:

  • LLVM& Clang(但我无能为力,因为我对它们了解不多)。
  • GCC(版本 4.6 )可以通过插件进行扩展,或者通过编码 MELT扩展 MELT来进行扩展用于扩展GCC编译器的高级域特定语言;在MELT中编写扩展名比在C中添加插件更容易。[我是MELT的主要作者]

扩展GCC是我(偏见)观点的好方法。但我承认(即使有了MELT的帮助)这也是非常重要的,因为你需要部分理解GCC的主要内部表示(Gimple,Tree)和内部传递。 (我猜你在LLVM / Clang中遇到同样的问题:要扩展它你需要理解它。)

GCC扩展(在MELT中)或插件(在C中)主要用于Gimple表示(模板扩展后)。

如果对使用MELT感兴趣,请随时向我提出更多要求。

存在一些昂贵的专有工具,例如coverity - 但是价格昂贵,我不知道他们能做什么。