精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何閱讀一份源代碼?

新聞
我從業這些年泛讀、精讀過的項目源碼不算少了,陸陸續續的也寫了一些代碼分析的文章,本文中就簡單總結一下我的方法。

閱讀源代碼的能力算是程序員的一種底層基礎能力之一,這個能力之所以重要,原因在于:

  • 不可避免的需要閱讀或者接手他人的項目。比如調研一個開源項目,比如接手一個其他人的項目。
  • 閱讀優秀的項目源碼是學習他人優秀經驗的重要途徑之一,這一點我自己深有體會。

然而,讀代碼比寫代碼還是更難一些,原因在于“寫代碼是在表達自己,讀代碼是在理解別人”。因為面對的項目多,項目的作者有各自的風格,理解起來需要花費不少的精力。

[[260278]]

我從業這些年泛讀、精讀過的項目源碼不算少了,陸陸續續的也寫了一些代碼分析的文章,本文中就簡單總結一下我的方法。

先跑起來

開始閱讀一份項目源碼的***步,是先讓這個項目能夠通過你自己編譯通過并且順利跑起來。這一點尤其重要。

有的項目比較復雜,依賴的組件多,搭建起一個調試環境并不容易,所以并不見得是所有項目都能順利的跑起來。如果能自己編譯跑起來,那么后面講到的情景分析、加上調試代碼、調試等等才有展開的基礎。

就我的經驗而言,一個項目代碼,是否能順利的搭建調試環境,效率大不一樣。

跑起來之后,又要盡量的精簡自己的環境,減少調試過程中的干擾信息。比如,Nginx使用多進程的方式處理請求,為了調試跟蹤Nginx的行為,我經常把worker數量設置為1個,這樣調試的時候就知道待跟蹤的是哪個進程了。

總而言之,跑起來之后的調試效率能提升很多,而在跑起來的前提之下又要盡量精簡環境。

調試手段

調試手段,大體分為以下兩種:

  • 加調試語句。為了做到這一點,你需要先了解項目如何加調試日志,可能需要修改項目的日志級別支持輸出一些在調試級別的日志,等等。
  • 斷點調試。并不是所有項目代碼,跑起來之后都自帶調試信息能夠斷點調試的。所以在自己的調試環境里需要先確定這一點。比如一些C相關的項目,基本都是”./configure & make”來編譯,但是makefile中的編譯flags使用了O2之類的優化選項,此時需要自己先手動修改成”-O0 -g”,即編譯生成的二進制中不優化且帶上調試信息。

總之,在能夠搭建自己的調試環境之后,還需要想辦法確定一下如何加上調試日志以及斷點調試。

使用順手的工具

好的工具會讓你事半功倍,這一點應該很多人都同意。

我閱讀Go代碼的時候,喜歡使用IDEA,這個IDE工具可以***的做到以下幾點:

符號的定位、跳轉、查找符號被引用的地方。

左邊能夠展開一個源碼文件中的所有符號。

反之,很多人推崇的VSCode,我幾次嘗試使用用來閱讀Go和C類代碼,都覺得不夠順手,查找符號能力不行、也沒有地方可以看到一個文件中出現的符號。

C\C++類的代碼,在嘗試各種工具之后,還是使用Vim+Ctags+Cscope來寫C、C++代碼。

情景分析

假如有了前面的基礎,已經能夠讓項目順利在自己的調試環境跑起來了,那么就可以對項目代碼進行情景分析了。

所謂的“情景分析”,我的理解就是自己構造一些情景,然后通過加斷點、調試語句等分析在這些場景下的行為。

以我自己為例,在寫《Lua設計與實現》時,講解到Lua虛擬機指令的解釋和執行過程中,需要針對每個指令做分析,此時用的就是情景分析的方法。我會模擬出來使用該指令的Lua腳本代碼,然后在程序里斷點調試這些場景下的行為。

我慣用的做法,是在某個重要的入口函數上面加上斷點,然后構造觸發場景的調試代碼,當代碼在斷點處停下,通過查看堆棧、變量值等等來觀察代碼的行為。

情景分析的好處在于:不會在一個項目中大海撈針似的查找,而是能夠把問題縮小到一個范圍內展開來理解。

“情景分析”這一概念不是我想出來的名詞,比如有這么幾本分析代碼的書籍,如:《Linux內核源代碼情景分析》,《Windows內核情景分析》。

利用好測試用例

好的項目都會自帶不少用例,這類型的例子有:etcd、google出品的幾個開源項目。

如果測試用例寫的很仔細,那么很值得好好去研究一下。原因在于:測試用例往往是針對某個單一的場景,獨自構造出一些數據來對程序的流程進行驗證。所以,其實跟前面的“情景分析”一樣,都是讓你從大的項目轉而關注具體某個場景的手段之一。

厘清核心數據結構之間的關系

雖然說“程序設計=算法+數據結構”,然后我實際中的體會,數據結構更加重要。

因為結構定義了一個程序的架構,結構定下來了才有具體的實現。

Linus說: “爛程序員關心的是代碼。好程序員關心的是數據結構和它們之間的關系。”

因此,在閱讀一份代碼時,厘清核心的數據結構之間的關系尤其重要。這個時候,需要使用一些工具來畫一下這些結構之間的關系,我的源碼分析類博客中有很多這樣的例子,比如《Leveldb代碼閱讀筆記》、《Etcd存儲的實現》等等。

需要說明的是,情景分析、厘清核心數據結構這兩步并沒有嚴格的順序關系,不見得是先做某事再做某事,而是交互進行的。

比如,你如果現在剛接手某個項目,需要簡單的了解一下項目,可以先閱讀代碼了解都有哪些核心數據結構。理解了之后,如果不清楚某些情景下的流程,可以使用情景分析法。總而言之,交替進行直到解答你的疑問為止。

多問自己幾個問題

學習的過程中離不開交互。

如果閱讀代碼只是輸入(Input),那么還需要有輸出(Output)。只有簡單的輸入好比喂東西給你吃,而只有更好的消化才能變為自己的營養,而輸出就是更好消化知識的重要手段。

其實這個思想很常見,比如學生上課(Input)了需要做練習作業(Output),比如學了算法(Input)需要自己編碼練習(Output),等等。簡而言之,輸出是學習過程中的一種及時反饋,質量越高學習效率越高。

輸出的手段有很多,在閱讀代碼時,比較建議的是自己能夠多問自己一些問題,比如:

為什么選擇這個數據結構來描述這個問題?類似的場景下,其他項目是怎么設計的?都有哪些數據結構做這樣的事情?

如果由我來設計這樣的項目,我會怎么做?

等等等等。越是主動積極的思考,就越有更好的輸出,輸出質量與學習質量成正比關系。

寫自己的代碼閱讀筆記

我從開始寫博客,就是寫不少各種項目的代碼解讀類文章,網名“codedump”也源于想把“code內部的實現原理dump出來”之意。

前面提到學習質量與輸出質量成正比關系,這是我自己的深刻體會。也因為如此,所以才要堅持閱讀源碼之后寫自己的分析類筆記。

寫這類筆記,有以下幾個需要注意的地方。

雖然是筆記,但是要想象著在向一個不太熟悉這個項目的人講解原理,或者想象一下是幾個月甚至幾年后的自己回頭來看這個文章。在這種情況下,會盡量的把語言組織好,循循善誘的解釋。

盡量避免大段的貼代碼。我認為在這類文章中,大段貼上代碼有點自欺欺人:就是看上去自己懂了,其實并不見得。如果真要解釋某段代碼,可以使用偽代碼或者縮減代碼的方式。記住:不要自欺欺人,要真的懂了。如果真的想在代碼上加上自己的注釋,我有一個建議是fork出來一份該項目某個版本的代碼,提交到自己的github上,上面隨時可以加上自己的注釋并且保存提交。比如我自己注釋的etcd 3.1.10代碼:etcd-3.1.10-codedump,類似的我閱讀的其他項目都會在github上fork出一個帶上codedump后綴的項目。

多畫圖,一圖勝千言,使用圖形展示代碼流程、數據結構之間的關系。我最近才發現畫圖能力也是很重要的能力,自己在從頭學習如何使用圖像來表達自己的想法。

寫作是很重要的基礎能力,我一個朋友最近教育我,大體的意思是說:如果你在某方面的能力很強,如果再加上寫作好、英語好,那么將極大放大你在這方面的能力。而類似寫作、英語這樣的底層基礎能力,不是一撮而就的,需要長時間保持練習才可以。而寫博客,對于技術人員而言,就是一種很好的鍛煉寫作的手段。

總結

以上是我簡單總結的一些閱讀源碼時候的手段和注意方法,大體而言有那么幾點吧:

只有更好的輸出才能更好的消化知識,所謂的搭建調試環境、情景分析、多問自己問題、寫代碼閱讀筆記等都是圍繞輸出來展開的。總而言之,不能像一條死魚一樣指望著光靠看代碼就能完全理解它的原理,需要想辦法跟它互動起來。

寫作是人的基礎硬實力之一,不僅鍛煉自己表達能力,還能幫助整理自己的思路。對程序員而言鍛煉寫作能力的手段之一就是寫博客,越早開始鍛煉越好。

***,如同任何可以習得的技能一般,閱讀代碼這種能力也需要長時間、大量的反復練習,下一次就從自己感興趣的項目開始鍛煉自己的這種技能吧。

責任編輯:未麗燕 來源: codedump.info
相關推薦

2016-10-11 16:28:11

源代碼

2023-03-21 09:44:34

模型AI

2022-04-29 08:48:25

開源

2024-03-20 12:44:35

AI訓練

2025-02-28 09:09:44

2025-07-03 09:28:44

架構群消息開發

2015-11-30 08:57:07

源代碼閱讀程序員

2015-11-30 11:01:07

程序員閱讀源代碼

2022-05-13 09:04:20

Python網絡爬蟲JS逆向問題

2014-08-28 15:21:03

Linux面試

2012-07-11 23:26:10

bug測試

2013-05-23 13:32:30

編程攻誠獅工程師

2012-11-27 09:54:57

簡歷創業項目

2018-05-16 09:00:00

物聯網物聯網平臺IoT

2015-12-02 10:02:30

程序員找工作

2018-03-09 10:28:30

生態報告簽收

2020-07-15 15:38:15

人臉識別照片活化手機

2011-05-25 16:59:20

前端工程師

2023-05-19 06:53:58

GPT分析報告

2020-06-01 15:04:44

甲骨文自治數據庫
點贊
收藏

51CTO技術棧公眾號

精品99一区二区| 亚洲视频一区二区在线观看| 欧美最顶级的aⅴ艳星| 亚洲精品成人无码熟妇在线| 午夜日韩成人影院| 亚洲色欲色欲www| 国产一区二区黄色| 五月天中文字幕| 欧美色图麻豆| 国产亚洲a∨片在线观看| 欧洲美女亚洲激情| 免费毛片b在线观看| 国产精品美日韩| 国产精品免费一区二区三区四区| 久久夜色精品国产噜噜亚洲av| 波多野结衣一区| 精品99一区二区| 视色视频在线观看| 性感女国产在线| 综合色中文字幕| 欧美精品亚洲| www.麻豆av| 蜜桃视频在线观看一区| 高清一区二区三区日本久| 国产调教在线观看| 好吊妞国产欧美日韩免费观看网站| 在线一区二区视频| 国产视频九色蝌蚪| 成人免费视屏| 国产三级一区二区| 久久99九九| 亚洲成人一级片| 久久成人av少妇免费| 欧美一级视频一区二区| 九九视频在线观看| 亚洲国产一成人久久精品| 亚洲一品av免费观看| 手机免费看av片| 亚洲网一区二区三区| 欧美日韩亚洲国产综合| 人妻有码中文字幕| 国内激情视频在线观看| 一区二区三区小说| 老司机午夜免费福利视频| 日本美女高清在线观看免费| 久久久av毛片精品| 久久一区二区三区av| 无码国产精品96久久久久| 国产综合成人久久大片91| 国产精品久久久久久久天堂| 免费无码国产精品| 久久人人97超碰国产公开结果| 韩日欧美一区二区| 日本三级网站在线观看| 韩国精品一区二区三区| 欧美激情精品久久久久久久变态 | 羞羞影院体验区| 国产真实久久| 97久久久久久| 男女视频免费看| 国产亚洲在线观看| 欧美一级视频一区二区| 99re国产在线| 日本欧美一区二区在线观看| 国产精品美女主播| 一级做a爱片性色毛片| 日韩avvvv在线播放| 国产精品视频自在线| 怡春院在线视频| 韩国毛片一区二区三区| 99re视频| 天天操天天干天天插| 2020日本不卡一区二区视频| 日本不卡久久| 嫩草在线视频| 夜夜精品视频一区二区| 欧美精品自拍视频| 国产日韩电影| 欧美精品一二三| 国产成人精品综合久久久久99 | 51漫画成人app入口| 精品magnet| www.99在线| 免费精品一区二区三区在线观看| 精品国产sm最大网站免费看| jizz日本免费| 国产精品久久久乱弄| 久久久久久久影院| 免费精品一区二区| 国产精品一品二品| 免费日韩电影在线观看| 免费在线午夜视频| 亚洲一区视频在线| 日韩视频免费在线播放| 久久久久亚洲精品中文字幕| 日韩av在线免费观看一区| 久久国产柳州莫菁门| 一区二区三区午夜视频| 国产69精品久久久久久| 国产精品久久久久久在线| proumb性欧美在线观看| 亚洲电影一二三区| 精精国产xxxx视频在线野外| 欧美三级中文字幕| 99re久久精品国产| 91精品国产91久久久久久密臀 | 国产精品免费av一区二区| 热久久一区二区| 国产精品我不卡| a中文在线播放| 午夜私人影院久久久久| 天堂一区在线观看| 香蕉国产成人午夜av影院| 久久天堂av综合合色| 天天综合天天干| 国产成人福利片| 亚洲乱码一区二区三区| 欧美一级鲁丝片| 日韩欧美综合一区| 欧美色图17p| 久久国产成人| 国产精选在线观看91| 欧美一区二区三区| 色八戒一区二区三区| 蜜臀av粉嫩av懂色av| 性欧美欧美巨大69| 国产精品高清免费在线观看| 香蕉av一区二区三区| 一区二区三区色| 亚洲欧美aaa| 欧美一级精品片在线看| 久久久久亚洲精品成人网小说| 亚洲一级av毛片| 国产欧美日韩卡一| 已婚少妇美妙人妻系列| 日日天天久久| 91精品国产色综合| 黄色av免费观看| 一区二区在线看| 日韩av影视大全| 在线中文一区| 5566中文字幕一区二区| 国产黄大片在线观看画质优化| 欧美吞精做爰啪啪高潮| 永久免费成人代码| 欧美亚洲一级| 欧美日韩国产一二| 桃色一区二区| 国产香蕉一区二区三区在线视频 | 美国黄色片视频| 蜜臀国产一区二区三区在线播放| 日韩精品不卡| jizz免费一区二区三区| 在线观看91久久久久久| 中文字幕第一页在线播放| 国产精品三级在线观看| 一本岛在线视频| 久久麻豆精品| 91欧美精品午夜性色福利在线| 天堂地址在线www| 制服丝袜亚洲网站| 麻豆91精品91久久久| 成人一区二区在线观看| 5月婷婷6月丁香| 国产传媒欧美日韩成人精品大片| 国产精品久久久av| 97视频在线观看网站| 欧美日韩国产一区二区三区地区| 91制片厂在线| 国产成人高清视频| www国产精品内射老熟女| 亚洲免费毛片| 国产精品美女网站| 成人在线app| 亚洲精品videossex少妇| 日本中文字幕第一页| 久久久久成人黄色影片| 艹b视频在线观看| 午夜久久影院| 久久久久久久有限公司| 亚洲伦理影院| 欧美xxxx综合视频| 午夜视频福利在线观看| 欧美三级在线播放| 欧美黄色一级网站| 久久久久久久久久电影| 亚洲三级在线观看视频| 亚洲精品看片| 亚洲精品一区二区三区av| 日本一区二区三区播放| 欧美在线日韩在线| 国产乱色在线观看| 日韩精品在线免费观看| 国产又粗又猛又爽又黄视频| 午夜久久久久久久久久一区二区| 中字幕一区二区三区乱码| 国产另类ts人妖一区二区| 哪个网站能看毛片| 国产综合精品| 亚洲无玛一区| 亚洲国产精品嫩草影院久久av| 成人精品视频久久久久| 日韩伦理在线一区| 久久伊人精品天天| 男女av在线| 精品欧美一区二区三区精品久久 | 国产在线88av| 久久久精品在线| 欧美色综合一区二区三区| 欧美一区二区三区在| 色老头一区二区| 午夜久久久影院| 成熟的女同志hd| 日本一二三不卡| 亚洲国产精品无码久久久久高潮| 狠狠狠色丁香婷婷综合激情 | 天天爽天天狠久久久| 精品久久对白| aaa级精品久久久国产片| 欧美国产大片| 91精品国产高清久久久久久久久| 久久久久久久久免费视频| 亚洲男女自偷自拍图片另类| 亚洲男人天堂久久| 欧美一区二区视频观看视频| 波多野结衣一二区| 欧美日韩中文字幕在线| 国产乡下妇女做爰| 亚洲美女在线国产| 国产精品精品软件男同| 亚洲国产经典视频| 久久精品国产亚洲AV熟女| 99久久久无码国产精品| 国产精品一级无码| 国产精品99精品久久免费| 亚洲高清在线不卡| 激情亚洲综合在线| www.cao超碰| 免费精品视频在线| 黑人粗进入欧美aaaaa| 美女网站久久| 久久国产色av免费观看| 久久久久久一区二区| 免费观看精品视频| 日韩极品在线观看| 午夜免费福利在线| 奇米影视7777精品一区二区| 熟女人妇 成熟妇女系列视频| 久久精品毛片| 国产成人久久婷婷精品流白浆| 国产视频一区免费看| 91国视频在线| 蜜桃伊人久久| 不卡的av中文字幕| 国产伦精品一区二区三区视频青涩| 热久久久久久久久| 国产成人综合网| 美女扒开腿免费视频| 99精品久久99久久久久| 巨胸大乳www视频免费观看| 久久精品一区二区三区不卡| 性高潮久久久久久久| 亚洲国产岛国毛片在线| 男人晚上看的视频| 亚洲最新在线观看| 国产视频91在线| 欧美亚洲一区二区在线观看| 中文字幕av在线免费观看| 制服丝袜亚洲精品中文字幕| 亚洲精品字幕在线| 亚洲摸下面视频| 在线播放麻豆| 欧美激情喷水视频| 最新欧美色图| 国产啪精品视频| 亚洲国产视频二区| 免费电影一区| 91综合久久| 国产日韩亚洲欧美在线| 天堂一区二区在线| 国产探花在线观看视频| av在线不卡观看免费观看| 久久只有这里有精品| 1000精品久久久久久久久| 久久国产一级片| 色婷婷久久久综合中文字幕 | 天堂av资源在线观看| 欧美在线影院在线视频| 亚洲精品777| 国产在线精品日韩| 久久中文字幕av| 国产原创popny丨九色| 美女高潮久久久| 人妻激情偷乱频一区二区三区| 久久久精品tv| 久久久久亚洲av成人片| 欧美综合一区二区三区| 亚洲国产精品成人久久蜜臀| 亚洲欧美色图片| 手机在线免费av| 国产一区在线播放| 欧美一性一交| 国产女主播av| 麻豆精品一二三| 特级西西人体wwwww| 亚洲人成网站影音先锋播放| 丰满人妻老熟妇伦人精品| 欧美成人a视频| 69久久精品| 清纯唯美亚洲激情| 一区二区精彩视频| 正在播放亚洲| 日韩高清中文字幕一区| 星空大象在线观看免费播放| 国产精品久久久99| 亚洲国产av一区二区三区| 欧美不卡视频一区| 黄色成人在线| 国产玖玖精品视频| 国产成人精品一区二区免费看京| 国产精品12345| 粉嫩av一区二区三区在线播放| 超碰人人干人人| 日本道色综合久久| 手机av免费在线观看| 欧美xxxx18性欧美| 国产一区二区久久久久| 亚洲视频导航| 免费在线视频一区| 一级肉体全黄裸片| 色8久久精品久久久久久蜜| 天天干天天插天天操| 欧美成人自拍视频| 国产美女精品视频免费播放软件| 三区精品视频| 免费在线视频一区| 18啪啪污污免费网站| 欧美主播一区二区三区| 福利在线视频导航| 国产精品激情av在线播放| 国产欧美久久一区二区三区| 青青视频在线播放| 91麻豆福利精品推荐| 青青草成人av| 日韩av中文字幕在线| 国产中文在线播放| 蜜桃999成人看片在线观看| 亚洲一区二区三区四区五区午夜| 任你躁av一区二区三区| 亚洲伊人色欲综合网| 黄色av免费观看| 91精品国产91久久久久福利| 欧美黑人做爰爽爽爽| 99999精品视频| 国产欧美日韩综合| 在线观看国产精品入口男同| 最近2019中文字幕大全第二页| 亚洲电影有码| 中文字幕一区二区三区四区五区人| 蜜桃在线一区二区三区| 国产67194| 精品国产伦一区二区三区观看体验| 国产在线天堂www网在线观看| 久久久久久久久久码影片| 日本中文字幕一区二区视频 | 国产小视频福利在线| 国产精品视频精品视频| 亚洲精品中文字幕乱码| 一区二区在线免费观看视频| 午夜精品久久久久久| 黄色软件在线观看| 91精品久久久久久| 国内揄拍国内精品久久| 一级国产黄色片| 欧美性猛交xxxx黑人交| 国产传媒在线播放| 国产一区二区三区四区五区在线| 亚洲综合日本| 亚洲人与黑人屁股眼交| 亚洲成人a级网| 精品无人乱码一区二区三区 | 人人爽人人爽人人片| 91麻豆精品国产91久久久久| av在线播放资源| 亚洲春色在线| 成人午夜视频网站| 夜夜躁日日躁狠狠久久av| 欧美精品日韩www.p站| 亚洲精品小区久久久久久| 久久久久久综合网| 狠狠操狠狠色综合网| 嫩草在线视频| 欧美激情论坛| 国产精品一二三| 久久久黄色大片| 久久91精品国产91久久跳| 啪啪亚洲精品| 日本少妇一级片| 欧美视频一区二区在线观看| 成人bbav|