LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 6755|回复: 20

linux下源码阅读工具

[复制链接]
发表于 2003-3-17 16:57:00 | 显示全部楼层 |阅读模式
阅读linux源代码的工具---lxr和glimpse简介 作者: sea_cloud@263.net
我们在阅读linux源代码时都有这样的体会:核心的组织相对松散,在看一个文件时往往要牵涉到其他的头文件、源代码文件。如此来回跳转寻找变量、常量、函数的定义十分不方便,这样折腾几次,便使读代码的心情降到了低点。
lxr(linux cross reference)就是一个解决这个问题的工具:他对你指定的源代码文件建立索引数据库,利用perl脚本CGI动态生成包含源码的web页面,你可以用任何一种浏览器查阅。在此web页中,所有的变量、常量、函数都以超连接的形式给出,十分方便查阅。比如你在阅读/usr/src/linux/net/socket.c的源代码,发现函数get_empty_inode不知道是如何以及在哪里定义的,这时候你只要点击 get_empty_inode,lxr将返回此函数的定义、实现以及各次引用是在什么文件的哪一行,注意,这些信息也是超连接,点击将直接跳转到相应的文件相应的行。另外lxr还提供标识符搜索、文件搜索,结合程序glimpse还可以提供对所有的源码文件进行全文检索,甚至包括注释!
下面将结合实例介绍一下lxr和glimpse的基本安装和使用,由于glimpse比较简单,就从它开始:
首先访问站点: http://glimpse.cs.arizona.edu/ 得到glimpse 的源码,比如我得到的是glimpse-4.12.5.tar.gz .
用root登录,在: 任一目录下用tar zxvf glimpse-4.12.5.tar.gz解开压缩包,在当前目录下出现新目录glimpse-4.12.5 .进入该目录,执行make即可。进入bin目录,将文件glimpse和glimpseindex拷贝到/bin或/usr/bin下即可。如果单独使用glimpse,那么只要简单的执行glimpseindex foo 即可,其中foo是你想要索引的目录,比如说是/usr/src/linux .glimpseindex 的执行结果是在你的起始目录下产生若干.glimpse*的索引文件。然后你只要执行glimpse yourstring即可查找/usr/src/linux下所有包含字符串yourstring的文件。
对于lxr,你可以访问 http://lxr.linux.no/得到它的源代码。解包后,遵循如下步骤:
/*下面的文字来源于lxr的帮助文档以及本人的安装体会*/
1)修改Makefile中的变量PERLBIN和INSTALLPREFIX,使它们分别为 perl程序的位置和你想lxr安装的位置.在我的机器上,PERLBIN的值为 /usr/bin/perl .至于INSTALLPREFIX,有如下原则,lxr的安装路径必须是web服务器能有权限访问。因此它的值简单一点可取 /home/httpd/html/lxr (对于Apache web server)。
2)执行 make install
3)修改$INSTALLPREFIX/http/lxr.conf :
baseurl : http://yourIP/lxr/http/
htmlhead: /home/httpd/html/lxr/http/template-head
htmltail: /home/httpd/html/lxr/http/template-tail
htmldir: /home/httpd/html/lxr/http/template-dir
sourceroot : /usr/src/linux # 假如对linux核心代码索引
dbdir : /home/httpd/html/lxr/dbdir/ #dbdirk可任意起名,且位置任意
glimpsebin: /usr/bin/glimpse #可执行程序glimpse的位置
4)在$INSTALLPREFIX/http/下增加一个文件.htaccess 内容:
SetHandler cgi-script
上面这个文件保证Apache server将几个perl文件作为cgi-script.
5)按照lxr.conf中的设置建立dbdir ,按照上例,建立目录 /home/httpd/html/lxr/dbdir
进入这个目录执行$INSTALLPREFIX/bin/genxref yourdir
其中yourdir是源码目录,比如/usr/src/linux
如果要结合glimpse,则执行glimpseindex -H . yourdir
6)修改 /etc/httpd/conf/access.conf ,加入
《Directory /home/httpd/html/lxr/http》
Options All
AllowOverride All
order allow,deny
allow from all
《/Directory》
7)进入/etc/rc.d/init.d/ 执行
killall httpd
./httpd start
进入X ,用浏览器 http://yourIP/lxr/http/blurb.html
大功告成 ,这下你可以舒心的读源码了。
注意:以上只是lxr和glimpse的基本用法,进一步的说明可以参考连机文档。如有问题请与 sea_cloud@263.net 联系。
***文中的“《”“》”,实际为“<”“>”,sorry,不这么写就不显示了
中国Linux论坛 版权所有
发表于 2003-3-17 21:01:51 | 显示全部楼层
This is a good software!
发表于 2003-4-12 16:09:43 | 显示全部楼层

我的用不了

我按照楼主说的一步步走,在装lxr的第6步的时候,我在/etc/httpd/conf/下找不到access.conf文件,就自己新建了一个,然后输入那些内容.然后在/etc/rc.d/init.d/下执行命令,在执行./httpd start的时候,提示输出为:
启动 httpd:httpd: Could not determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
                                                           [  确定  ]
不知这样是正确启动了呢还是出错了?
最后我在浏览器里输入http://myip/lxr/http/blurb.html显示信息为:
Object not found!

The requested URL was not found on this server. If you entered the URL manually please check your spelling and try again.
If you think this is a server error, please contact the webmaster

Error 404

211.68.36.159
2003?02ê04?08?0012?06?09 ?04?05?04?03?09ù 15?08±57*?0006?01?05
Apache/2.0.40 (Red Hat Linux)

总之就是用不了.
我的系统为redhat 8.0,安装方式为custom下的完全安装,装好后未设置过http服务器什么的,系统里应该都是缺省设置.

我急于找到一个好的内核代码阅读工具来帮助我完成毕业设计,有劳楼主或哪位高手指出我的问题所在.
发表于 2003-4-13 19:02:36 | 显示全部楼层
推荐使用我的工作方式:
两台机器ne linux,one win
在win下用source insight阅读和修改linux下的源码。
souce insight的功能太强大了。
发表于 2003-4-15 08:52:15 | 显示全部楼层
可以不用access.conf,直接加入到httpd.conf中就行了
发表于 2003-4-24 19:11:57 | 显示全部楼层

终于搞定!

我试了好多次,最后把楼主的方法略作修改,终于能舒舒服服地读代码了.
改动如下,是在lxr的安装上:
1)步中,应将安装目录设置为: /var/www/html/lxr(对redhat8.0而言).设为其它目录理论上也可以,只是我没有成功过.
3)中的设置相应变为:
  修改$INSTALLPREFIX/http/lxr.conf :
  baseurl : http://yourIP/lxr/http/
  htmlhead: /var/www/html/lxr/http/template-head
  htmltail: /var/www/html/lxr/http/template-tail
  htmldir: /var/www/html/lxr/http/template-dir
  sourceroot : /usr/src/linux # 假如对linux核心代码索引
                                          #对我来讲是: /usr/src/linux-2.4.18-14
  dbdir : /var/www/html/lxr/dbdir/ #dbdirk可任意起名,且位置任意
  glimpsebin: /usr/bin/glimpse #可执行程序glimpse的位置
4)步我参照lxr的安装说明将 .htaccess的内容设为:
   <Files ~ (search|source|ident|diff)$>
   SetHandler cgi-script
   </Files>
5)dbdir的位置当然也需改为/var/www/html/lxr/dbdir
最后在浏览器中键入http://myip/lxr/http/blurb.html  时,出现一个大概起说明作用的界面,里面有Browse the code的链接,不过我这儿该链接始终指向http:source/,根本访问不了.之后我把地址改为http://myip/lxr/http/source  终于OK!
发表于 2003-4-30 11:24:51 | 显示全部楼层

求助!!

我的安装过程中没有错误,源代码也可以载入?可是为什么不能检索?
提示idx打不开?请问是什么原因??
发表于 2003-5-2 10:11:30 | 显示全部楼层
我在第5步执行 $INSTALLPREFIX/bin/genxref yourdir时报错:Cant find 'DB_File.pm' in @INC(...), 为什么?
发表于 2003-5-6 07:59:55 | 显示全部楼层
install db_file.pm, see another post.
发表于 2003-5-24 16:04:15 | 显示全部楼层
我在最后一步用浏览器查看时浏览器直接连接到一个关于lxr的网站去了怎么回事?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表