使用grep/find组合来查找函数或结构的用法

Nav*_*K N 3 c linux grep

我想知道如何使用find & grep组合有效地找到文件中函数/结构的用法.

例如,git我的机器上有源代码.如果你看一下commit.h,你可以看到commit结构被定义为,

struct commit {
    struct object object;
    void *util;
    unsigned int indegree;
    unsigned long date;
    struct commit_list *parents;
    struct tree *tree;
    char *buffer;
};
Run Code Online (Sandbox Code Playgroud)

我有兴趣找出这个结构初始化的位置以及它们如何初始化缓冲区.首先我试过,

grep -rn "(struct commit)" .
Run Code Online (Sandbox Code Playgroud)

这给了我一个具有这种结构初始化的文件.现在我需要找出buffer初始化作为此结构成员的变量的位置.

grep -rn "buffer" .
Run Code Online (Sandbox Code Playgroud)

返回了很多结果,很难找到它的用途.

所以我想知道,你如何有效地找出符号的用法?我不是在谈论IDE提供什么,而是使用像grep和的标准linux工具find.你如何设法破解大型代码库并了解它是如何工作的?

Kis*_*lay 10

您是否为此目的评估了cscope或ctags?

它们都适用于vim和emacs.它们为您提供的主要功能是查找源代码中可能在不同文件中使用和定义的符号定义.

我个人使用cscope http://cscope.sourceforge.net/cscope_vim_tutorial.html,它可以很好地为我挖掘代码.