1. 原则

原则1:了解使用

仔细查看使用文档和说明,写较为详细的 demo 程序。

原则2:了解全局

了解该产品解决了哪些问题,并了解其周边产品及优缺点。

原则3:了解原理

查看其内部架构文档,如果有了周边产品的了解,可以从周边产品推算出其实现基本原理。不过当对其它产品了解比较深刻的时候,这个原则很容易就可以达到了。

2. 方式

单步 Debug

单步 Debug 是比直接阅读源码来得更加直观快速的方式,通过单步 Debug 的主要目的是了解整个源码的大概逻辑和流程。

  • 针对应用程序(Tomcat、Hadoop):找启动脚本 -> 找到 main 入口 -> 开始 Debug
  • 库、框架(FastJSON、Spring):找到关键类 -> 打断点 -> 查看堆栈

「无法 Debug?」

很多时候我们拿到的都是「无法运行」的代码,比如说构建起来很麻烦的源码、只有一个 lib 包。在这个时候只能采取一些其它手段了。

  • 在我看来,最有效的方式还是 Debug。如果遇到了比较难构建的源码,那么暂时放弃构建它的想法,可以直接新建一个工程并添加其 Jar 包依赖,写测试代码的方式进行 Debug。至于测试代码,可以从源码的官方文档、或者它的测试用例中找到;

  • 如果以上也是比较麻烦的话,那就直接强行裸看代码吧,不过裸看代码也有一些简便的方法让你更好的裸看代码,比如接下来的。

梳理整个工程的类依赖关系图

以 Intellij IDEA 的为例:

  • 右键 Java 类
  • 点击 Diagrams
  • 点击 Show Diagrams

查找方法调用关系

以 Intellij IDEA 的 Mac OS X 的快捷键为例:

  • Alt + F7 (Find Usage)
  • Ctrl + Alt + H (Call Hierarchy)

搜索关键字

这个一般在无头绪的时候才会使用的。比如出现了框架内部的错误,里面包含了特殊关键字,如错误日志或者没有堆栈的方法。

这个在 Intellij IDEA 中比较好用,可以包含依赖的三方库进行全文搜索。快捷键:

  • Ctrl + Shift + F (Find in path)

搜索三方库需要选择 Custom -> Project and Libraries

如果是 Eclipse 的话,似乎只能是大概知道是哪个 Jar 包之后,解压 source 包再全文搜索吧 = =

3. 其他

我好像就上面几个方法,看任何源码(Hadoop、Spring、Netty、公司内部的)都能够很快上手。如果想到啥或者有啥比较典型的实例的话,再补充吧。