有关标记和搜索c ++代码的质量方法的任何建议。我使用cscope / ctags作为大多数东西,但我发现它不足以找到一些工作中过于复杂的c ++代码。我已经开始从vim切换到Slickedit(这仍然不是完美的,但更好)用于浏览代码,但是我想回到vim。
我想要的是可以理解类成员范围的东西,例如,如果我搜索对其他类中存在相同成员名的类的成员的引用(并且可能是c ++代码之外)只会给我相关的参考资料。
我更喜欢与vim一起使用的东西,但任何开源软件包都可以自己创建一个插件。
任何建议表示赞赏,谢谢。
答案 0 :(得分:30)
您确定使用正确的选项调用了ctags吗?对于C ++,我使用:
ctags --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++
这是文档对--c++-kinds=+p
选项所说的内容:
解析C ++成员函数定义时(例如 “className :: function”),ctags无法确定是否为范围说明符 是类名或命名空间说明符,并始终将其列为类名 在扩展字段的范围部分中。另外,如果是C ++ 函数是在类声明(通常情况)之外定义的 访问规范(即公共,受保护或私有)和 包含在函数中的实现信息(例如虚拟,纯虚拟) 为函数生成标记时,不知道声明 定义。然而,它将用于原型
(例如--c ++ - types = + p)。
--fields=+iaS
选项:
a Access (or export) of class members
i Inheritance information
S Signature of routine (e.g. prototype or parameter list)
--extra=+q
选项:
因为默认情况下,ctags只为源文件中的单独标识符生成标记。如果指定--extra = + q选项,则ctags也会生成一个 第二个是类成员(数据和函数/方法)的类限定标记,格式为class :: member for C ++,以及表格class.method for Eiffel和Java。
--language-force=C++
选项:
默认情况下,ctags会自动选择源文件的语言,忽略那些无法确定其语言的文件(请参阅上面的SOURCE FILES)。此选项强制指定的语言(不区分大小写;内置或用户定义)用于每个提供的文件,而不是根据其扩展名自动选择语言。此外,特殊值auto表示应自动选择语言(这有效地禁用了此选项)。
答案 1 :(得分:9)
使用doxygen这是一个很好的工具来浏览代码并查看类和成员之间的关系。该工具为源代码生成可点击的html输出,并为每种用法提供参考。您可以将其编译为可搜索的chm文件,或使用Web服务器在代码中搜索关键字。
答案 2 :(得分:1)
尝试GNU全球http://www.gnu.org/software/global/
它可以生成导航:源代码的网页以及支持vim和通常有用的命令行界面。
答案 3 :(得分:0)
我没有这方面的经验,但我使用Doxygen来浏览复杂项目的源代码。只需在打开所有设置的情况下运行它,它将生成调用图,被调用者图,引用和引用关系,模板实例等。输出格式包括HTML,LaTeX,CHM,POD
希望这有效!
答案 4 :(得分:0)
有一段时间,我为此目的混合了不同的工具。 Vi是一个很棒的编辑器,你可以在没有麻烦的情况下在远程计算机上运行它,但完成信息不是语义。
当面临一个大问题时,我倾向于使用Eclipse CDT或QTCreator,在这两种情况下,最新版本,一年前的版本都不是那么好。 QTCreator是一个轻量级工具,但我对其分析代码的能力印象深刻。 Eclipse CDT的重量比较重,但是我对这个界面有点习惯了,所以最后我倾向于使用它。
我正在处理的项目是在一个单独的沙箱中编译的,这两个IDE都不能使用,但是您可以获取存储库的副本以供分析,并将IDE用作浏览工具。