分享》:關(guān)于閱讀開源項(xiàng)目的源碼思路方法

關(guān)于閱讀開源項(xiàng)目的源碼思路方法:《不喜勿噴》

一般開源項(xiàng)目, 如果這個(gè)項(xiàng)目你很熟悉經(jīng)常用, 那么你直接從 main 入手沒問題.。

如果你不熟悉或者代碼量很大, 最好從代碼的 example 代碼 或者 client 的代碼入手比較容易. 這些代碼直接 gdb 進(jìn)去就可以調(diào)試運(yùn)行了, 客戶端的功能搞清楚了,會用了, 恐懼感就降下去了, 再看服務(wù)端就容易了.

看 c 代碼要 關(guān)注主體核心 struct , 整個(gè)server, client 可能都是圍繞整個(gè) struct 運(yùn)行起來的, 這個(gè)struct 的指針 傳來傳去. 而看 java 代碼 就需要關(guān)注最主要的 interface, 通過 interface


看繼承類.

有的人喜歡微觀從main開始看,有的喜歡宏觀先看數(shù)據(jù)結(jié)構(gòu)(接口), 這個(gè)都可以.

另外看網(wǎng)絡(luò)代碼,最要關(guān)注的就是 何時(shí) listen, 何時(shí) accept, epoll_ctl 注入的幾個(gè)函數(shù)是誰,對應(yīng)java 里就是 selector 之后的幾個(gè)讀寫函數(shù). 找到這幾個(gè)函數(shù),基本網(wǎng)絡(luò)框架就理解了, 網(wǎng)絡(luò)模型就那么幾種.

看網(wǎng)絡(luò)協(xié)議包處理函數(shù)可以讓你更好的理解干巴巴的協(xié)議.

看? help 函數(shù) 可以更快的知道 如何使用.

如果代碼不好調(diào)試, 根據(jù)程序運(yùn)行的日志輸出, 在代碼里找日志輸出點(diǎn)也是一種方法.

自己寫一個(gè) cscope.sh 腳本, 放到path里, 代碼下載下來在主目錄運(yùn)行一下就可以開看了.

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 看代碼, 反復(fù)進(jìn)去退出, 寫個(gè) macro file 也是不錯(cuò)的

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 里輸入?yún)?shù)多麻煩阿.

vim 的 ctags, cscop只能利用symbol 來查找還是弱了一點(diǎn), 用 eclipse 看 java 就更加方便了, 看 擴(kuò)展類, 看調(diào)用關(guān)系都是一個(gè)右鍵可以搞定的. java 項(xiàng)目可以利用 maven 把依賴的jar的 source 都下下來.

我一般習(xí)慣左邊顯示器開代碼(vim, eclipse). 右邊我一般會開個(gè) xmind, dia 或者 luchidchart, griffly 畫畫uml流程時(shí)序圖什么的.尤其多線程的程序, 各種 lock 和 queue 調(diào)用, 你沒有圖比較難理清楚思路. 紙筆有的時(shí)候更加效果.

個(gè)人覺得代碼比看書更應(yīng)該有產(chǎn)出, 我們可以看閑書一掃而過, 看代碼最好還是記點(diǎn)筆記, 畫個(gè)圖. 方便回憶,方便continued.? 如果想保護(hù)自己開源項(xiàng)目的源碼不被逆向,詳情了解,愛加密教你Android APP如何防止二次打包http://www.ijiami.cn/newsInfo?id=280&v=3

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容