分享》:关于阅读开源项目的源码思路方法

来源:互联网 发布:东风3怎么运到沙特知乎 编辑:程序博客网 时间:2024/05/17 03:04
关于阅读开源项目的源码思路方法:《不喜勿喷》 

       一般开源项目, 如果这个项目你很熟悉经常用, 那么你直接从 main 入手没问题.。 

       如果你不熟悉或者代码量很大, 最好从代码的 example 代码 或者 client 的代码入手比较容易. 这些代码直接 gdb 进去就可以调试运行了, 客户端的功能搞清楚了,会用了, 恐惧感就降下去了, 再看服务端就容易了. 
 
       看 c 代码要 关注主体核心 struct , 整个server, client 可能都是围绕整个 struct 运行起来的, 这个struct 的指针 传来传去. 而看 java 代码 就需要关注最主要的 interface, 通过 interface 
看继承类. 

        有的人喜欢微观从main开始看,有的喜欢宏观先看数据结构(接口), 这个都可以. 

        另外看网络代码,最要关注的就是 何时 listen, 何时 accept, epoll_ctl 注入的几个函数是谁,对应java 里就是 selector 之后的几个读写函数. 找到这几个函数,基本网络框架就理解了, 网络模型就那么几种. 

       看网络协议包处理函数可以让你更好的理解干巴巴的协议. 

        看  help 函数 可以更快的知道 如何使用. 

        如果代码不好调试, 根据程序运行的日志输出, 在代码里找日志输出点也是一种方法. 



         自己写一个 cscope.sh 脚本, 放到path里, 代码下载下来在主目录运行一下就可以开看了. 

find . -name "*.h" -o -name "*.c" -o -name "*.py" -o -name "*.lua" -o -name "*.erl" -o -name "*.hrl" -name "*.java" >> cscope.files
cscope -bkq -i cscope.files 
ctags -R 
ctags -I __THROW --langmap=c:+.h --languages=c --c-kinds=+p --if0=yes --exclude=java --file-scope=yes -f systemtags /usr/include/* /usr/include/sys/* 

        用 gdb 看代码, 反复进去退出, 写个 macro file 也是不错的 

b main 
r --user=mysql --gdb --basedir=/usr/local/mysql --datadir=/usr/local/mysql/var --log-error=/usr/local/mysql/var/hoterran-laptop.err --pid-file=/usr/local/mysql/var/hoterran-laptop.pid 
set scheduler-locking off 

gdb -x macro-file libexec/mysqld 

gdb --args 挺好用的, 很多人喜欢在 gdb 里输入参数多麻烦阿. 


       vim 的 ctags, cscop只能利用symbol 来查找还是弱了一点, 用 eclipse 看 java 就更加方便了, 看 扩展类, 看调用关系都是一个右键可以搞定的. java 项目可以利用 maven 把依赖的jar的 source 都下下来. 

       我一般习惯左边显示器开代码(vim, eclipse). 右边我一般会开个 xmind, dia 或者 luchidchart, griffly 画画uml流程时序图什么的.尤其多线程的程序, 各种 lock 和 queue 调用, 你没有图比较难理清楚思路. 纸笔有的时候更加效果. 

        个人觉得代码比看书更应该有产出, 我们可以看闲书一扫而过, 看代码最好还是记点笔记, 画个图. 方便回忆,方便continued.  如果想保护自己开源项目的源码不被逆向,详情了解,爱加密教你Android APP如何防止二次打包http://www.ijiami.cn/newsInfo?id=280&v=3 
1 0
原创粉丝点击