zoukankan      html  css  js  c++  java
  • 分享》:关于阅读开源项目的源码思路方法

    关于阅读开源项目的源码思路方法:《不喜勿喷》

           一般开源项目, 如果这个项目你很熟悉经常用, 那么你直接从 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如何防止二次打包

     

  • 相关阅读:
    Repeater OnItemCommand 失效
    继承类时的 this 和 base
    想当然造成的的错误
    排序算法二叉树
    href 一个正则表达式的解析 ? 号解析
    给父窗口添加新的代码
    ValidationSummary 控件
    交叉表 学习
    定向思维 C# datediff
    cookie 问题
  • 原文地址:https://www.cnblogs.com/ablansetaimeng/p/4705434.html
Copyright © 2011-2022 走看看