假设我们有一个由100个文件组成的项目(例如一个库),每个文件包含大约1000行代码。 你想找到函数awesome_foo(...) 你怎么做呢?老实说,我发现它令人毛骨悚然,无效......
编辑:我主要关注函数定义
答案 0 :(得分:4)
grep -irnw "awesome_foo" *
肯定会给你结果。
参数是:
-i, - ignore-case
忽略PATTERN和输入中的大小写区别 文件。
-n, - line-number
使用输入中的行号为每行输出添加前缀 文件。
-R,-r, - recursive
递归地读取每个目录下的所有文件;这相当于-d recurse选项。
-w, - word-regexp
仅选择包含整体匹配的行 话。测试是匹配的子字符串必须是 在行的开头,或前面是非单词con 成分性质。同样,它必须在最后 该行或后跟非单词构成字符。字- 组成字符是字母,数字和下划线。
答案 1 :(得分:3)
如果您可以使用记事本等具有很好的文件查找功能的工具,它将返回直接文本搜索甚至正则表达式的所有实例。我经常使用它,非常有帮助。
答案 2 :(得分:3)
集成开发环境会解析您的代码并生成一个索引,该索引允许您通过按住Ctrl键并单击它或使用某些键盘快捷键来导航到每个符号的声明(或用法)。这就是人们经常使用大型代码库的方式。
如果您没有使用IDE,您仍有一些选择。
CTags是一个索引器,它读取源文件并生成“索引文件”,其中包含程序的符号信息。它可以连接到编辑器(如Vim)或只生成一个人类可读的符号引用。
这是示例program的ctags -x
的输出:
DrawGLScene 37 lesson5.c void DrawGLScene()
InitGL 15 lesson5.c void InitGL(int Width, int Height) // We call this right after our OpenGL window is created.
ReSizeGLScene 24 lesson5.c void ReSizeGLScene(int Width, int Height)
keyPressed 62 lesson5.c void keyPressed(unsigned char key, int x, int y)
main 78 lesson5.c int main(int argc, char **argv)
看起来像“名称,行和文件,签名”,可以很容易地手动用作索引。
-x
将表格式,人类可读的交叉引用(外部参照)文件打印到标准输出,而不是生成标记文件。输出中包含的信息包括:标签名称;标签的种类;定义标记的文件的行号,文件名和源行(带有额外的空白空间)。没有写入标记文件,将忽略影响标记文件输出的所有选项。此功能的示例应用程序生成位于源文件中的所有函数的列表(例如ctags -x --c-types = f文件),或生成位于源文件中的所有外部可见全局变量的列表(例如ctags) -x --c-kinds = v --file-scope = no file)。此选项必须出现在第一个文件名之前。
答案 3 :(得分:0)
使用eclipse
IDE。您可以在导航器中跟踪功能。 CodeInsight
也没关系。只需添加一个项目即可添加对代码的跟踪。相信我,它会节省你的时间。
答案 4 :(得分:0)
答案 5 :(得分:0)
另一种可能性是astro grep这是一个Windows应用程序,它为你提供了一个gui来形成你的grep语句,将'sting'带出来并使形成复杂搜索的过程变得非常简单。
“的特点: - 正则表达式(使用标准Microsoft .Net正则表达式:快速参考) - 并发多种文件类型 - 递归目录搜索 - “上下文”功能,用于选择搜索表达式上方和下方的行 - 搜索路径的最近使用列表 - 多种多样的打印选项 - 双击打开文件,使用您选择的编辑器 - 存储最近使用的文件名和搜索表达式 - 仅匹配整个单词 - 语法高亮 - 免费和开源“