开源代码分析技巧之三——老外如是说

来源:互联网 发布:java参数是什么意思 编辑:程序博客网 时间:2024/04/30 12:08

 继续从深入分析开源代码说起,当然源码分析没有太多捷径可走。笔者只是探讨下,如何分析会更好些。特通过Samba技术邮件群组,向老外提问如何更好的分析Samba源码

       以下是老外回复的翻译,针对Samba源码说的,但对所有的开源代码的分析原理相通,都可以拿来借鉴、消化吸收。

      一、研究开源代码,老外说

       一些人们用来研究Samba源码的想法:

       1、使用论坛中提及代码浏览技术(我现在使用GNU Global + vim,过去使用OpenGrok,并且将来还会用)来轻松地在代码间跳转,弄清楚这个函数的功能是什么以及调用了这个函数是至关重要的。

       2、以你想要运行的方式动起来研究源码。可以使用类似systemtapktapdtrace的工具(我在SambaXP对后者写了一个简报)。更深入的了解哪些文件被打开了,运行时的调用堆栈是什么,怎么样读取/写入文件等等……

       祝你在研究中好运!

     二、解读老外回复关键词

       就邮件中老外的几个关键词解读如下:

       1gnu global是一个类似cscope的工具,也能提供源文件之间的交叉索引。其独到之处在于,当你生成索引文件以后,再修改整个项目里的一个文件,然后增量索引的过程非常快。 

       2OpenGrok是源代码分析利器,速度比SourceInsight快很多。

       3SystemTap监控和跟踪运行中的Linux 内核的操作的动态方法

       4ktap是一种新的基于脚本的动态跟踪工具,用于Linux的,它使用一种脚本语言,并允许用户动态跟踪Linux内核。类似SystemTapSolaris DTrace工具。它不依赖于GCC,不需要编译内核模块为每个脚本,实现了嵌入式系统的跟踪需要。

       5SambaXP对应http://sambaxp.org/,是Samba用户和开发者的技术会议,用于讨论新的需求、新的特征、获取新的技术更新。

       三、个人见解

       正如老外回复,核心点有二个。

        1、代码分析工具。便于代码之间进行跳转,因为代码是死的,手动的方式去查阅调用逻辑关系费时、费力,效率极其低下。笔者的经验是将其编译为一个大工程,笔者最初用的是SourceInsight,其间发现有些函数的跳转不顺畅。后来将整个工程置于VS2010下,虽庞大,但查询函数调用一层一层还是很有用的。

       笔者发现,开源代码有的时候单独一个函数代码行数多、函数参数巨多。举例来讲,Samba源码中有一个函数有近1000行代码的,有一个函数有近20个参数的。这样的话,就需要我们从纵向横向两个方向分析源码。横向分析函数调用逻辑,纵向分析参数在函数中如何使用的。其中,纵向分析,可以使用NodePad++,他可以在一个文件检索关键词,并会将检索结果的索引列举在最下方,很直观、很方便。

       2、让代码“动起来”。这点可以通过gdb单步调试跟踪函数调用逻辑,可以打印函数调用堆栈,可以通过strace跟踪文件打开、读写操作。

        笔者补充一点,“日志文件”的分析也是至关重要的。Samba源码一般在/usr/local/samba/etc/smb.conf文件中,可以将loglevel设置为1-10,一般3,5,10的日志级别是常用的,日志级别越高,打印的日志越详细,越便于我们分析源码调用。

原创粉丝点击