怎麼閱讀源碼【調試觀察源碼】
- 2022 年 2 月 15 日
- 筆記
- 怎麼閱讀源碼【調試觀察源碼】
✿ 需要掌握的編譯器知識
★ 編譯器為eclipse為例子
-
調試準備工作(步驟:Window -> Show View -》…):
□ 打開調試斷點Breakpoint:

□ 打開變數監視:

-
要看一個方法的內部細節,按f5,進入

-
要快速跳到某個位置【在目標位置上打個斷點】,然後按f8

-
觀察方法的細節(執行流程),一步一步走,按f6

-
去除掉所有斷點(編譯器是eclipse)

□ 注意看開始標記的執行位置對不對

-
f5調試的方式進入【
若進入的是不相干的,按f7返回,再按f5進入一次】
舉例:
User user = mapper.get(1L); //在這裡打一個斷點進入,會先進入Long類,因為執行順序是(1L)先執行呀,所以先進入它之後,再執行get方法
-
按ctr 和 按調試的f5的區別:
□ ctr:是進入「被選中的程式碼(類、介面、方法)」的定義的位置【強調點是程式碼的定義】
□ f5:是對於當前程式碼按執行的先後順序進行執行,進入、執行它的內部【強調點是程式碼的執行】 -
按ctr 結合滑鼠, 可以知道程式碼下一步的去向(按ctr要注意的細節:ctr默認進入的是被選中的程式碼的定義,不是實現過程,進入之後發現沒看到什麼有幫助理解的程式碼,返回返回按住ctr,選擇實現(若是有多個實現,
不知道選哪個,可以通過調試f5進入),再按滑鼠進入。


-
重新開始調試細節:
(1)關閉上一次調試
(2)點擊 開始調試之前,保留開始位置的斷點前面的√,其他斷點前面的√先去掉(開始調試之後才√回來)

-
進入一個方法後了解到方法的細節,想返回接著往下執行,按f7 返回 【
返回按f7】
一般在深入了解某個模組之後,可以按返回,返回。。。然後接著了解下一個模組

✿ 讀源碼的思路
1、重點理解執行邏輯(執行過程可以按control進入方法或類,理解下一步去向後,游標回到當前位置【快捷鍵是alt+←】)
2、看源碼過程理清思路,異常相關的(error、exception、throw),讓程式碼更加健碩的細節可以忽略;棧相關的stack,底層的可以忽略
3、在程式碼中,看到選擇分支的話,可以觀察變數的值(判斷條件)知道要進入哪個分支
4、在程式碼中,看到不理解的程式碼,可以先往下執行,然後通過觀察變數的值進行理解【還可結合官網進行理解】
5、讀取流、載入資源、綁定命名空間、參數轉化不是重點
6、構造構造器不是重點,重點是看 構造器的構造過程
7、構造解析器不是重點,重點是看 解析器的解析過程
8、創建了子類要注意:什麼類型的子類?當子類有封裝的父類或兄弟類時候,注意封裝的父類或兄弟類是什麼類型的?
✿ 讀源碼如何抓重點的思路(以mybatis的源碼為例)
■ 1、 閱讀源碼的過程,應該閱讀哪一個,哪一個是閱讀重點呢?
- 閱讀源碼構建會話工廠對象的源碼,咱了解到:創建了一個SqlSessoinFactory會話工廠對象是通過默認的SqlSessoinFactory創建的,在創建的時候需要傳入一個配置對象【即創建會話工廠對象的時候還創建了一個配置對象】,至此,研究一下配置對象的創建過程。

- 閱讀源碼構建會話工廠對象的源碼,咱了解到:創建一個sqlSession會話對象是通過默認的sqlSession,在創建的時候需要傳入三個參數,重點是觀察哪個呢?
□ configuration 配置對象(在閱讀會話工廠對象構建的源碼的時候咱就了解過它了,不是重點)
□ executor 執行器(重點,因為在return 會話對象之前構建了executor執行器)
□ autoCommit (是否提交,布爾值,不是重點)

- 結合理解邏輯,還有return的提示作用,知道閱讀重點是list的過程

✿ 閱讀源碼需要掌握的單詞
- map 映射 mapper 映射器
- factory 工廠
- build 構建
- config 配置
- parse 解析 parser 解析器 parsed 已解析的 parseConfiguration 解析配置
- interceptor 攔截器
- plugin 「安裝[增強]」、插件
- proxy 代理
- prepared 預編譯的 callable 存儲的
- statment 語句對象 preparedStatement 預編譯語句對象 callableStatement 存儲的語句對象
- cursor 游標
- instantiate 實例化 instantiateStatement 實例化語句對象
- handler 處理器 typeHandler 類型處理器
- row 行














