如何快速搜索项目中所有包含的头文件以查找特定符号?

Posted

技术标签:

【中文标题】如何快速搜索项目中所有包含的头文件以查找特定符号?【英文标题】:How can I quickly search all included header files in a project for a specific symbol? 【发布时间】:2012-03-27 10:57:21 【问题描述】:

这是我最近遇到的一个问题,这对这里的其他人来说是一种常见的痛苦。

我正在使用其他人的遗留 C 代码,需要查找函数或宏的定义位置。除了来自特定项目的那些之外,代码#includes 是一堆不同的标准系统库。

是否有工具或技术可以快速找到特定函数、宏(或其他全局变量)的定义位置?

我试过了:

grep -R 'function' /usr/lib

和其他类似的 *nix/bash-fu 只取得了有限的成功,并且有很多烦人的谷壳需要剔除。对于这种看似常见的情况,你们中的一位精明的程序员一定有一个很好的解决方案。

我很惊讶在这里或在我对互联网的搜索中没有找到关于这种特殊痛苦的另一个问题。 (如果我错过了一个,我敢肯定会有愤怒的 cmets... ;-))

提前感谢您的任何提示!

【问题讨论】:

我们结合了 Opengrok 和 Doxygen,这有点帮助... 【参考方案1】:

将exuberant ctags project 中的etags/ctags 与理解它们的编辑器(emacs、vim)或GNU GLOBAL 结合使用。

哦,如果你碰巧使用了 automake,它会生成一个目标 TAGS。所以不需要复杂的手动调用c,etags

【讨论】:

谢谢。虽然我以前使用过 ctags,但我没有意识到我可以将它们用于现有的系统库。我喜欢 GNU GLOBAL 还显示函数实例的能力(即 CTAGS 所做的反向映射)。【参考方案2】:

使用 ctags/cscope + vim/emacs

你可以谷歌他们的详细使用。

如果你使用 ctags + vim,你可以:

1.进入/usr/include目录,执行ctags -f tags1 -R .生成标签

2.在你的代码目录ctags -f tags2 -R中为你的代码生成标签。

3.在你的vim中运行:set path+=tags1,tags2

4.在函数或marco下试试CTRL+]

【讨论】:

【参考方案3】:

这是你可以做的,假设你使用 gcc,如果不只是相应地修改它。

gcc -E myfile.c | grep '^#' | cut -f 3 -d ' ' | sort |uniq | xargs -n 1 grep -l "MYMACROORFUNCTIONNAME"

【讨论】:

【参考方案4】:

您可以使用 Eclipse CDT。例如,这里描述了如何设置 CDT 项目来导航 Linux 内核源 - HowTo use the CDT to navigate Linux kernel source。

【讨论】:

【参考方案5】:

vim + ctags 是要走的路。可以跳转和定义函数、全局变量、宏等。

仅供参考,browsing programs with tags

另外,如果你想在.c和.h文件之间快速切换,请参考this blog

【讨论】:

【参考方案6】:

您可以使用cscope 或emacs/vim + xcscope.el 轻松做到这一点。 我认为它比 ctage 和 etage 更棒。

【讨论】:

【参考方案7】:

如果包含直接或间接定义您要查找的内容的正确标头,大多数 IDE 都具有有效的跳转到定义功能。

标签方法当然很好,因为它们不依赖于正确包含的标题。

【讨论】:

以上是关于如何快速搜索项目中所有包含的头文件以查找特定符号?的主要内容,如果未能解决你的问题,请参考以下文章

如何让g ++搜索特定目录中的头文件?

linux 上查找包含特定文本的所有文件

windows批处理问题,如何批量删除某几个子文件夹下面,文件名包含特定字符串的所有文件?

如何查找包含标题的位置

如何在 Visual Studio 代码中快速查找项目中的文件或符号?

如何使用特定符号 C++ 查找和替换字符串中的所有字符