6

问题

我最近发现自己在处理一个大型的、不熟悉的、多部门的 C++ 代码库,需要更好的组织。我想找到一种方法来映射任何给定标头的哪些源文件使用哪些符号。这是希望如果只有一个部门使用给定的功能,那么它可以移出共享区域并进入该部门的区域。


尝试

我的第一个想法是使用符号表:即。编译项目并转储每个目标文件的符号。从那里我想我可以简单地编写一个脚本来检查我的头文件中的符号是否被使用。虽然这种方法似乎可行,但它需要我从标题中创建一个我正在寻找的符号列表。以我有限的知识,我不确定如何自动化这样的过程,并且有数百个头文件要测试,手动执行是不可能的。


问题

  • 我的方法有效吗?如果是这样的话..
    • 我可以使用什么从头文件中生成符号名称?
  • 如果不..
    • 我还可以做些什么?

此外,当我使用 Linux 时,大多数开发团队都在仅 Windows 的环境中工作。我可以在两个平台上使用哪些实用程序?


非常感谢任何和所有帮助。

4

3 回答 3

2

当我需要清理 API 时,我有时会使用来自callcatcher的信息。它基本上在编译时构建所有符号的数据库,并允许您确定在某些构建产品中使用了哪些符号。

我有时也使用DXRgithub 上的代码一个示例安装)来浏览定义了哪些代码在哪里使用是如何使用的。与使用 DXR 的 callcatcher 相比,您可以深入了解更精细的细节。设置 DXR 相当繁重,但如果您有足够的代码可以使用,这可能是值得的。

另一方面,有cscope之类的工具。尽管它不能很好地与 C++ 代码一起工作,但它仍然非常有用。如果你处理超过几个 100kloc,你很快就会感到有限。

如果我必须只选择其中一个工具并且要处理大型代码库 (>1Mloc),我肯定会选择 DXR。

于 2012-08-30T23:09:11.577 回答
1

非常老派,简单,可能只有 unix,但你知道etags吗?还有gnu global我认为是相似的。

gnu 全局链接指的是此处的“与类似工具的比较”讨论,这也可能有用。

于 2012-08-30T23:17:03.667 回答
1

您可以使用doxygen对您所描述的信息有一个合理的起点。

即使对于不包含 doxygen 格式注释的源,创建的文档也可以包含使用特定符号的位置列表(即源文件)。

而且,由于 doxygen 可用于生成 html 文档,因此在源代码树中导航变得微不足道。如果您启用点功能来为源代码树中的类生成关系图,那就更好了。

于 2012-08-30T23:25:56.050 回答