2011-11-29 134 views
2

我有大量的手写C++源代码(即WebKit和其他开源代码)。反向工程C++的工具(即查看C++类)

我想要一个工具,它会:

  • 让我看到每个类别间的关系和任何类:
    • 包含关系:即其他类包含这个类,或包含通过它(头文件声明模板化的智能指针类型作为成员数据)
    • 声明的依赖关系(即在方法签名中使用该类型;尽管我可以使用'在文件中查找'很好地看到这一点)
    • 子类和超类层次结构
  • 在Windows或Linux(甚至是一个基于Web的解决方案)
  • 优选具有UI(或者是过分的要求?)运行
  • 任选以插件一个IDE

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

  • 解析定义/ implementati上(在CPP和c文件)
  • 支持编辑或“往返”源

相反,解析在应用程序和系统头文件(包括模板类型和类型定义)的类型声明就足够了。我有所有头文件的列表。我更喜欢它,如果它可以处理预处理器定义(特别是#include和#if),但是如果必要的话我可以预处理;和/或以各种格式制作或制作文件。

+8

请让您的问题自成一体,并定义“逆向工程C++源代码”的含义。 –

+0

也许使用doxygen自动生成使用图。这至少会给你提供关于类的关系的一些信息。注意:我从来没有使用过这个功能,但记住这是可能的。 – Nobody

+0

@KerrekSB - 我希望我已经定义了它。如果不清楚,请提出具体问题。 – ChrisW

回答

2

您可以随时使用doxygen,它会为您提供关于您的头文件集的完整文档(继承,用法,...)。它还可以生成类层次结构之外的图形。

+0

我无法编辑源代码来添加评论。 – ChrisW

+1

即使没有评论可用,doxygen会为您提供这些信息。 –

+0

Doxygen确实能够找到关键字(类,...),所以你应该能够从中得到一些东西 – nevero

1

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

有两种编译器,你可以扩展:

  • LLVM &锵(但我可以”没有帮助,因为我不太了解他们)。
  • GCC(版本4.6 )是可扩展的通插件或通过编码一个MELT扩展MELT是一个高层次的域专用语言来扩展GCC编译器;它更容易使用你的扩展熔体比C.插件代码[我熔体的主要作者]

扩展GCC是我的(偏)查看好办法做到这一点。但我确实承认(即使在MELT的帮助下)它也不是微不足道的,因为您需要部分理解GCC主要内部表示(Gimple,Tree)和内部传球。 (我猜你对LLVM/Clang有同样的问题:要扩展它,你需要了解它)。

GCC扩展(在MELT中)或插件(在C中)主要是在Gimple表示(在模板扩展之后)上工作。

如果对使用MELT感兴趣,请随时向我询问更多。

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

+0

我想要一个用户友好的用户界面的东西:也许是一个IDE插件。 – ChrisW

+0

我听说Coverity是一个具有网络用户界面的昂贵的专有工具。 –

+0

@Basile:我对MELT很感兴趣,看到我的问题:http://stackoverflow.com/questions/15042991/c-dependency-tracking-tool-reverse-engineering MELT能够做我想做的事吗?谢谢! – kakyo