gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 08:33:46 25 4
gpt4 key购买 nike

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

然而,烦人的是:

如果一个struct在其他很多头文件中声明,那么查到的结果会是一大堆不完整的声明和一个完整的struct定义。很难区分定义和声明。

例如struct task_struct的搜索结果是:

task_struct

Defined as a struct type in:

drivers/mmc/card/queue.h, line 7 drivers/oprofile/cpu_buffer.h, line 21

drivers/net/wireless/cw1200/cw1200.h, line 34

include/uapi/linux/capability.h, line 18

include/asm-generic/syscall.h, line 22

......

......

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

如何解决这个问题?

最佳答案

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

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

在 Linux 源代码树中查找结构定义的最佳方法是逐字搜索:

struct struct_name {

strict coding style由 Linux 贡献者遵循,结构定义应始终采用这种形式。

LXR 有一个 freetext search以应对其局限性。不幸的是,它使用谷歌搜索,ignores most punctuations . GitHub 似乎也忽略了它们,Google 代码也是如此。

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

git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git

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

grep -rin 'struct task_struct {' include

或者,使用 ag:

ag 'struct task_struct {' include

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

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

lxr() {
chromium "http://lxr.free-electrons.com/source/$(grep -rl "$1" include | head -1)"
}

或者,使用 ag:

lxr() {
chromium "http://lxr.free-electrons.com/source/$(ag -l "$1" include | head -1)"
}

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

lxr 'struct task_struct {'

希望对您有所帮助。

关于c - 如何在网站 lxr.free-electrons.com 找到结构的完整定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27162892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com