首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在lxr.free-electrons.com网站上找到结构的完整定义?

如何在lxr.free-electrons.com网站上找到结构的完整定义?
EN

Stack Overflow用户
提问于 2014-11-27 04:05:46
回答 3查看 692关注 0票数 0

当我想在linux内核中找到结构的定义时,站点lxr.free-electrons.com非常有用。

但是,烦人的是什么:

如果在许多其他头文件中声明了一个结构,那么找到的结果将是很多不完整的声明和一个完整的结构定义。很难区分定义和声明。

例如,struct task_struct的搜索结果是:

task_struct 定义为结构类型: 驱动程序/mmc/card/Quee.h,第7行驱动程序/oprofile/cpu_Buffer.h,第21行 驱动程序/net/wireless/ 34 1200/cw1200.h,第34行 包括/uapi/linux/capability.h,第18行 包括/asm-泛型/syscall.h,第22行 . .

找到struct task_struct的完整定义是非常糟糕的。

如何解决这个问题?

EN

回答 3

Stack Overflow用户

发布于 2014-11-27 06:51:43

这似乎是lxr.free-Electrons.com背后的引擎LXR的一个限制:它没有区分前向声明(struct task_struct;)和完整的定义。

我选择的方法总是通过查看文件名来选择,因为通常很明显,给定的结构定义应该在哪里(例如,在您的例子中,它与调度有关,所以文件列表中的sched.h应该有它)。但是,我知道人们可能不熟悉Linux内核源代码,因此不知道该去哪里。

在Linux源代码树中找到结构定义的最佳方法是从字面上搜索:

代码语言:javascript
复制
struct struct_name {

由于严格编码风格后面跟着Linux贡献者,所以结构定义应该始终采用这种形式。

LXR有一个自由图文检索来处理它的局限性。不幸的是,它使用谷歌搜索,其中的忽略大多数标点符号。GitHub似乎也忽略了它们,也忽略了Google。

我的建议是克隆主线Linux存储库:

代码语言:javascript
复制
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git

然后是grep (或者更好的是ag)在include目录中寻找的内容:

代码语言:javascript
复制
grep -rin 'struct task_struct {' include

或者,使用ag

代码语言:javascript
复制
ag 'struct task_struct {' include

您将在结果中看到定义此结构的文件(通常只有一个),然后可以在LXR上找到适当的文件并继续您的研究。

下面是一个shell函数,可以使用第一个结果转到适当的LXR页面:

代码语言:javascript
复制
lxr() {
    chromium "http://lxr.free-electrons.com/source/$(grep -rl "$1" include | head -1)"
}

或者,使用ag

代码语言:javascript
复制
lxr() {
    chromium "http://lxr.free-electrons.com/source/$(ag -l "$1" include | head -1)"
}

用您最喜欢的浏览器命令替换chromium。像这样使用它:

代码语言:javascript
复制
lxr 'struct task_struct {'

希望能帮上忙。

票数 2
EN

Stack Overflow用户

发布于 2014-11-27 06:50:09

我发现在我的系统中下载linux源代码并使用cscope命令行工具浏览非常有用。它与ctags一起对于代码导航非常有用。

票数 0
EN

Stack Overflow用户

发布于 2015-01-12 06:22:03

试试这个struct&type=definitions&page=0

它实际上是显示定义的行,所以我们不需要来回检查。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27162892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档