我最近发现自己正在使用一个需要更好组织的大型,不熟悉的,多部门的C ++代码库。我想找到一种方法来映射哪些符号被哪些源文件用于任何给定的头文件。这是希望如果只有一个部门使用给定的功能,那么它可以移出共享区域并进入该部门的区域。
我的第一个想法是使用符号表:即。编译项目并转储每个目标文件的符号。从那里我想我可以简单地编写一个脚本来检查我的头文件中的符号是否被使用。虽然这种方法似乎可行,但它需要我从标题中创建一个我正在寻找的符号列表。由于我的知识有限,我不确定如何自动执行这样的过程,并且要测试数百个头文件,手动执行它是不可能的。
此外,在使用Linux时,大多数开发团队仅在Windows环境中工作。我可以在两个平台上使用哪些实用程序?
非常感谢任何和所有帮助。
答案 0 :(得分:2)
当我需要清理API时,我有时会使用来自callcatcher的信息。它基本上在编译时构建了所有符号的数据库,并允许您确定某些构建产品中使用的符号。
我有时也会使用DXR(code on github,an example installation)来浏览定义所用内容的代码。与使用DXR的callcatcher相比,您可以深入了解更精细的细节。设置DXR非常重要,但是如果你有足够的代码可以使用它可能是值得的。
另一方面,有cscope等工具。即使它不能很好地与C ++代码一起工作,它仍然非常有用。如果你处理超过100kloc,你很快就会觉得有限。
如果我只选择其中一个工具并且将使用大型代码库(> 1Mloc),我肯定会选择DXR。
答案 1 :(得分:1)
非常老派,简单,可能只有unix,但你知道etags吗?还有gnu global我认为是相似的。
gnu全局链接指的是the "comparison with similar tools" discussion here,它也可能有用。
答案 2 :(得分:1)
使用doxygen可以合理地开始您所描述的信息。
即使对于不包含doxygen格式注释的源,创建的文档也可以包含使用特定符号的位置列表(即源文件)。
而且,由于doxygen可用于生成html文档,因此在源代码树中导航变得微不足道。如果您启用点功能以生成源树中类的关系图,则可能会更好。