【问题标题】:How to navigate C source code?如何浏览 C 源代码?
【发布时间】: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


【解决方案1】:

如果你喜欢日食,试试nsight。它适用于 cuda,但我认为它可以满足您的需求。

【讨论】:

    【解决方案2】:

    为 Linux 内核试用 QtCreator。我写了如何使用它here。 这是我见过的最好的 Linux 内核开发 IDE。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多