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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 继续从深入分析开源代码说起,当然源码分析没有太多捷径可走。笔者只是探讨下,如何分析会更好些。特通过Samba技术邮件群组,向老外提问“如何更好的分析Samba源码”。

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


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


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


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


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


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


      祝你在研究中好运!


    二、解读老外回复关键词


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


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


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


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


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


      5、SambaXP对应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的日志级别是常用的,日志级别越高,打印的日志越详细,越便于我们分析源码调用。



附老外回复原文:


Some thoughts for people studying Samba:


1. Use code browsing technology of some form.  (I use GNU Global + vim right now.  I've used OpenGrok in the past, and will again.)  The ability to easily jump around the code, and ask "what does that function do" is critical.  Also to ask "What calls this function."


2. Study the system live, running the way you want.  Use tools like systemtap, ktap, and dtrace (I've written a presentation on the latter, that I gave at SambaXP.) to gain insight into what files are being opened, what is the call stack when it happens?  What about reads/writes?  Etc...


Good luck in your search,



      开源代码博大精深,源码分析的乐趣当然令大家神往。笔者总结列举了几个方法了,你使用了几个呢?


      2013-11-23  am9:51思于家中床前



推荐阅读:


【1】开源代码分析技巧之一——打印调用逻辑


http://blog.csdn.net/laoyang360/article/details/12676131


【2】开源代码分析技巧之二——gdb单步调试


http://blog.csdn.net/laoyang360/article/details/14102181


【4】开源代码分析技巧之四——国外技术社区提问


http://blog.csdn.net/laoyang360/article/details/16897827


【5】开源代码分析技巧之四——高效Windows源码分析


http://blog.csdn.net/laoyang360/article/details/18186529


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
2月前
|
人工智能 Linux 开发工具
Zynq MPSoC折腾 —— 开篇
Zynq MPSoC折腾 —— 开篇
|
6月前
|
前端开发 JavaScript Java
童年回忆——捕鱼达人(内含源码inscode一键运行)
童年回忆——捕鱼达人(内含源码inscode一键运行)
|
6月前
奇淫技巧系列第三篇:阅读源码时基于一组快捷键让我们知道身在何方!
奇淫技巧系列第三篇:阅读源码时基于一组快捷键让我们知道身在何方!
|
前端开发 Linux 定位技术
嵌入式Linux系列第21篇:应用程序之开篇闲聊
嵌入式Linux系列第21篇:应用程序之开篇闲聊
|
算法 NoSQL API
到底该不该看源码(懂这三点儿就够了)
1、不要为了看源码而看源码 2、代码积累到一定程度,遇到问题自然就去查源码了,然后你就看懂了 3、两年内不要刻意去看源码,可以点开简单了解一下就行,前两年疯狂做项目就行了,后期项目做的多了,你自己就会有疑问,每次写代码就会问自己为什么要这样写?底层的原理是什么?很自觉的带着问题就去看源码了,如果你没有这样的疑问,那说明你也不适合去看源码了,写写业务代码,了了一生
189 0
|
安全 Android开发
21天打卡Andoid学到的一些小知识-第十九二十二十一天
今天我们学习打卡的内容是:android 10.0 去掉未知来源弹窗 默认授予安装未知来源权限
91 0
|
Java Android开发
21天打卡Andoid学到的一些小知识-第十七十八天
今天我们学习打卡的内容是:Android 10.0 屏蔽掉 SystemUI 的通知提示音
75 0
|
算法 Unix 程序员
看完这篇操作系统,和面试官扯皮就没问题了。(一)
操作系统是运行在计算机上最重要的一种软件,它管理计算机的资源和进程以及所有的硬件和软件。它为计算机硬件和软件提供了一种中间层
看完这篇操作系统,和面试官扯皮就没问题了。(一)
|
消息中间件 存储 算法
看完这篇操作系统,和面试官扯皮就没问题了。(二)
操作系统是运行在计算机上最重要的一种软件,它管理计算机的资源和进程以及所有的硬件和软件。它为计算机硬件和软件提供了一种中间层
看完这篇操作系统,和面试官扯皮就没问题了。(二)
|
算法 调度
看完这篇操作系统,和面试官扯皮就没问题了。(三)
操作系统是运行在计算机上最重要的一种软件,它管理计算机的资源和进程以及所有的硬件和软件。它为计算机硬件和软件提供了一种中间层
看完这篇操作系统,和面试官扯皮就没问题了。(三)