在内核代码中查找函数的最佳方法

时间:2013-11-14 20:34:42

标签: c linux ide

我开始浏览内核代码,有一件事是绊脚石是如何遵循函数调用,结构定义等。是否有一种很好的方法可以快速跳转到函数定义并返回出来吗?

我尝试过Source Navigator,虽然我认为这很好,但只要你点击右键并要求它找到定义,它就会给你多个文件中的定义。如果我在foo.c中从其中一个包含调用bar(),我希望能够直接进入foo引用的bar(),而不是花时间确保我要去正确的定义(例如,如果源树中的多个文件具有foo不引用的bar()函数)。

我宁愿不使用grep。我明白了,它是命令行,并且可以解决这个问题,但它比Source Navigator更加艰辛。

我愿意使用IDE,命令行或其他最好的东西(虽然我更喜欢IDE)。那么,请问,寻找内核源代码的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

如果您最好只是浏览代码,可以使用一些linux交叉引用网站。 http://lxr.linux.no/是一个非常好的网站,服务于其目的。优点是您可以在标签之间切换并轻松浏览下拉菜单,并且它们有从Linux .01开始的任何内容,您不必保留内核树的本地副本。它们已经停止了一段时间,现在已经恢复了。

如果您计划进行内核黑客攻击,则需要拥有内核源代码的本地副本。然后最好的选择是cscope。您可以使用cscope -R创建数据库并与vim一起使用。您也可以使用ctags。这个解决方案是我在编码时通常使用的解决方案。 cscope在查找当前活动的#defines并且只显示活动代码时不是很聪明,所以如果你有多个相同功能的定义,它会显示所有这些,你可以选择你实际看的定义对于。

如果您对IDE感兴趣,那么我建议eclipse。它是一种免费软件,重量轻,可扩展,功能丰富。它适用于Linux,Mac和Windows。与cscope类似,它也可以基于prebuild db工作,db的大小完全基于源树。除非你有庞大的系统内存,否则我不建议将它用于整棵树。

我通常用于代码浏览的是,我将内核源代码放在网络位置,我在我的mac中映射eclipse的位置,并在eclipse中设置create only softlink选项(这样它就不会尝试创建自己的本地副本)和bam !!您已准备好使用IDE。如果您映射整个配置的树,您将获得所有#defines和同一函数/变量的多个声明也已解决。

答案 1 :(得分:1)

在内核源代码中,执行

make cscope
cscope -p9 -d