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

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

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

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

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


看繼承類.

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

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

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

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

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

自己寫一個 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)去退出, 寫個 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 里輸入?yún)?shù)多麻煩阿.

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

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末跪但,一起剝皮案震驚了整個濱河市履羞,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌屡久,老刑警劉巖忆首,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異被环,居然都是意外死亡糙及,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進(jìn)店門筛欢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來浸锨,“玉大人,你說我怎么就攤上這事版姑≈眩” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵剥险,是天一觀的道長聪蘸。 經(jīng)常有香客問我,道長表制,這世上最難降的妖魔是什么健爬? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮么介,結(jié)果婚禮上娜遵,老公的妹妹穿的比我還像新娘。我一直安慰自己壤短,他們只是感情好魔熏,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布衷咽。 她就那樣靜靜地躺著鸽扁,像睡著了一般蒜绽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上桶现,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天躲雅,我揣著相機(jī)與錄音,去河邊找鬼骡和。 笑死相赁,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的慰于。 我是一名探鬼主播钮科,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼婆赠!你這毒婦竟也來了绵脯?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤休里,失蹤者是張志新(化名)和其女友劉穎蛆挫,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體妙黍,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡悴侵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了拭嫁。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片可免。...
    茶點(diǎn)故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖做粤,靈堂內(nèi)的尸體忽然破棺而出浇借,到底是詐尸還是另有隱情,我是刑警寧澤驮宴,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布逮刨,位于F島的核電站,受9級特大地震影響堵泽,放射性物質(zhì)發(fā)生泄漏修己。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一迎罗、第九天 我趴在偏房一處隱蔽的房頂上張望睬愤。 院中可真熱鬧,春花似錦纹安、人聲如沸尤辱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽光督。三九已至阳距,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間结借,已是汗流浹背筐摘。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留船老,地道東北人咖熟。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像柳畔,于是被迫代替她去往敵國和親馍管。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容