【发布时间】:2015-03-14 18:04:27
【问题描述】:
我最近写了很多 java 代码,已经习惯了 IDE 功能,比如跳转到定义。
现在我正在研究 C(阅读一些内核代码),想知道该语言是否也有类似的工具。
我知道ctags、cscope 和 lxr,但它们似乎非常依赖模式匹配,并不真正理解代码。
例如,我有一些使用struct file 的代码,如何导航到该结构的定义以确定可用字段?
即使我知道它是在fs.h 中定义的,并且它包含在types.h 中定义为unsigned __bitwise__ 的fmode_t 类型的字段,有没有办法获得单个位的语义? (可能通过再次在fs.h 中找到FMODE_* 常量。)
这种(类似日食的)直接导航是否可能,或者如果我以前不知道所有这些,我真的需要做很多猜测吗?
【问题讨论】:
-
我为此使用 OpenGrok:opengrok.github.io/OpenGrok 它是
ctags上的 Web 界面,非常有用。但它找不到struct file定义,因为struct file* file构造在内核中太流行了。但它适用于 typedef:code.metager.de/source/… -
> 这种(类似日食的)直接导航是否可行
-
正确解析 C 代码(导航它所必需的)是一个难题。所有的#defines、#ifdefs、typedefs、在源代码之外配置的不同构建等等,基本上意味着要有100%正确的源代码导航,代码需要像编译器一样被完全解析。一些 IDE 做得不错(我使用 Qt Creator,但我确信 C 项目有更好的 IDE)。好的“在文件中查找”是您的朋友,并且知道如何使用它。
标签: c linux-kernel ctags cscope