如何閱讀源碼
❶ 如何讀源代碼
我以前,讀代碼一般是先看看程序包含哪些頭文件,接著作者又定義了哪些宏,聲明了哪些全局變數。(注意,除了頭文件幾乎每個程序都有之外,其他兩項不一定都有。)
之後看自定義函數的原型,了解它們各是負責什麼工作的(可以猜一猜)。對於具體的實現,先不看。(一般在主函數之後或其他文件里實現)
然後進入主函數,採用「逐行掃描」的閱讀方式。直到主函數結束。
最後才去看那些自定義函數的具體實現。
另外,如果程序中還有「類」的話,那我會先去看一看類的介面,就是它能提供哪些操作。具體的實現都是讀完主函數之後才看的。
當然這是我的習慣,我想各人有各自的習慣,所以僅供樓主參考,你應該有自己的習慣。
C++程序一般分為幾個文件存放。我喜歡先看一看.h頭文件里都聲明了些什麼。特別注意類的介面。然後進入主函數所在的.cpp源文件,從頭到尾「逐行掃描」。最後才去看類的介面及自定義函數是如何實現的。
❷ 如何閱讀源代碼
《通用源碼閱讀指導書》易哥 寫的一本書
❸ 如何閱讀程序源代碼
閱讀源代碼的第一個工具,就是你手中的code base。把它編譯出來,運行它,加log,試著修改一些數據和代碼,看看有什麼變化。
第二個重要的工具就是debugger,而debugger最重要的功能是獲取call stack。在你感興趣的use case里pause一下,在你不知道有什麼用的函數里加個斷點,顯示出來的call stack都能讓你對系統有更清晰的認識。
一個軟體系統就是一個小宇宙。別期待有什麼高明的文檔。要把自己當成探求自然真理的物理學家。
必須找好切入點。你要解決什麼問題。是要fix bug;還是要把這個系統和其它模塊集成;還是要增加新功能。物理學家沒有上來就研究整個宇宙的,必須選好分支。
如果你有一個猜想,但是又和你的目標關聯不太大,那就堅持這個猜想,直到出現明顯反例。物理學有很多這樣的例子,和數學不同,為了旁支猜想投入過多研究是不明智的。
如果有明顯證據證明你的某個旁支猜想大錯特錯,你就要放棄主要目標,暫時把解決旁支猜想作為主要目標。比如,你本來以為某個結構是LRU的cache,結果發現怎麼做都不對,那就先放棄原來的目標,專門研究這個結構的用途。
對於旁支猜想的不斷切換,要做好自己的task stack保留。在旁支猜想解決之後,要根據結論盡快回到上次中斷的任務。
復雜的軟體系統更像一個動物,待久了你會了解它的脾性。有些是通過邏輯,有些是通過感覺。玩車的尚且有這種感覺,我們玩的東西比車復雜上萬倍,就更不能對它缺乏感情投入。(這也是我不愛做企業開發的原因,我不愛養個爬行類當寵物,還是貓貓狗狗的親切。)
❹ 如何去閱讀並學習一些優秀的開源框架的源碼
對於開發者來說,社區里豐富的開源代碼其實是筆極為寶貴的財富。如果能充分利用好開放源代碼的資源,不僅可以掌握多種編程方法,提高實踐能力,還能獲得好的思想,激發編程靈感。開源代碼怎麼學以及怎樣才能學好是大家經常關注的話題,日前,在問答網站知乎上,有人拋出了「如何更有效地學習開源項目的代碼?」的話題,眾技術好手各抒己見,CSDN軟體研發頻道對本文內容進行了整理,方便大家學習與參考。盛大創新研究院研究員 庄表偉:學習開源 盡可能在代碼里找答案 庄表偉提供了以下9個建議:1.在下載源代碼之後,首先要跑起來,編譯通過、正常運行;2.在你覺得最有可能運行到的地方,設置斷點或者拋出異常,這樣,就能夠找到一個項目在正常運行時的入口點;3.從入口點所在的那個源文件開始閱讀,逐步把握整個項目是如何啟動起來;4.隨便改點代碼,看看會不會報錯,如果報錯,會從哪裡報錯;5.試著把報錯屏蔽、修復、或者繞開;6.嘗試理解一個系統的內部結構,多少組成部分,主線模塊是哪些?輔助模塊是哪些?7.從實際需要出發,修改這個項目,滿足自己的某一個小的需求。(注意在此之前,盡量不要在網路上找答案);8.看看相關的討論與心得,是否與自己的理解相一致;9.提交bug fix或者某個新的功能代碼。在學習開源的過程中,有幾個方面會獲得大量收獲,1.架構與模式;2.開源社區常見的一些慣用法;3.相關領域的結構與演算法。總結一點:學習開源,盡可能在代碼里找答案,而不是在代碼之外找答案,那些都是二手的,而且很可能不準確。互聯網評論員 朱曉陽:從簡單做起 理論聯系實踐朱曉陽對此發表了兩點看法:首先,從簡單做起。剛開始的時候學習一些領域內基礎理論,然後找一些簡單的東西去實現,不能一開始就去找開源項目。建議大家經常動手寫一些小程序,如改進宿舍網路登錄客戶端等。積小成多,能顯著提高自己的編程能力。其次,學習的知識一定要和自己生活或工作有聯系,這樣才會有樂趣或動力。互聯網評論員孫竟:先構想一個想做的項目首先,構想一個想做的項目(比如論壇、博客、微博等);然後,思考需要什麼功能,應該怎麼去實現,盡可能包括各種細節,有必要時記錄下來;最後,去找個類似的開源應用,看看它是怎麼實現的,和你的想法有什麼差異,有什麼可以學習或需要改進的地方。互聯網草根hqman:我的5個建議:1.反復地使用軟體,熟釋軟體的組成文件和軟體功能,注意IE地址欄內的地址變化;2.打開資料庫文件或存放數據的XML文件,參照數據字典了解各個表和欄位的數據含意;如果沒有數據字典,就運行軟體輸入數據,參照所輸入的數據,了解各個表和欄位的數據含義;3.利用Visio進行反向工程,將類圖抽出來;4.研究類之間的關系,注釋各個類的屬性和方法,弄清程序的整體框架;5.另開一個項目,按照軟體開發的流程,將代碼分段復制進新的項目,進行編譯調試,關注一些實現細節,學習一些編程的技巧。在讀研究生張偉:在校學生空閑時間多參加一下比賽張偉的建議是大家在空閑時間多參加一些比賽。一個完整的項目,不管再小,只要做完了,就會有收獲。多看一些比較大的開源項目源代碼,每次看完後都會受益匪淺。從網上成熟的開源代碼里,可以學到很多的設計思想。他認為,從項目入手,以項目為驅動,可激勵自己進步。當然,是否一定需要看開源代碼,這將取決於個人的興趣和需要。畫出程序流程圖 理解程序流程思想CSDN博客專家i_like_cpp:曾在CSDN分享了《如何將源代碼學好》的博文,對此,他給出了四點建議:1. 畫出整個程序的流程圖,理解整個程序流程的思想。畫流程圖的方式更讓人很直接的理解程序的整體流程,而不會被代碼所干擾,讓程序員總體上把握整個程序;2. 對流程各節點(函數或過程)的理解,流程的每一節點是構成整個流程的不可缺少的部份;3.再把流程和流程各節點串起來理解整個程序,可能的話最好寫出讀書筆記;4. 如果想深刻的學習到源代碼的精髓所在,請寫一個相近的程序進行操練。理解了這個程序並不表明掌握了這個程序,只有在操練一個相近的程序時,才知道你到底理解了多少,掌握了多少。編後語:源代碼的學習是一個從整體到不斷細化的過程,是一個極為繁瑣的過程同時也是一個不斷認清事物本源的過程。本文總結的源代碼的學習經驗,希望對您有所幫助。那麼,CSDN的網友們,你們是如何對待開源項目源代碼的呢?
❺ 怎麼閱讀Spring源碼
准備工作
1. 安裝github:現在spring源代碼都在github管理,所以首先需要下載githup,下;
2. 安裝gradle構建工具: 下載完後進行解壓到任意盤符,然後增加環境變數GRADLE_HOME,並在環境變數bin中增加%GRADLE_HOME%/bin,打開DOS窗口,運行gradle -v,出現版本號等信息,表示安裝成功;
3. 下載Spring源碼:首先打開git shell,切換到你的工作目錄,然後輸入以下命令:git clone git://github.com/SpringSource/Spring-framework.git,後面一串是源碼下載地址。大概半小時的樣子,就可以下載完成,這時候在你的工作目錄中就會出現Spring-framework的目錄,裡面有Spring各組件的源碼包;
4. 構建導入:下載下來的代碼不能直接導入Eclipse,要先轉換成Eclipse能讀取的形式。因為所有組件都會依賴spring-core,所有我們首先要轉換Spring-core工程,在命令窗口切換到Spring-core工程,運行gradle cleanidea eclipse命令,我們會看到開始下載工程所依賴的jar包,幾分鍾後執行完畢,再來看Spring-core文件夾,多了.classpath、.project等文件,這是Eclipse工程所必須的,然後可以把他導入到eclipse。因為大部分Spring組件都會用到 spring-beans、spring-context、spring-aop,而他們又依賴spring-expression、spring-instrument,所以我們乾脆先把這些工程都進行轉換並導入eclipse。
我初次導入過程並不順利,拿spring-core為例,其中以來的一個jar包是Spring-framework/spring-core/build/libs/spring-asm-repack-4.0.jar,但我工程裡面並沒有他,只好在網上下載了一個,並加入構建路徑,其次我還發現少commons-pool-1.5.3.jar、spring-cglib-repack-3.0.jar,都一一下載,最後還是報錯沒有java.util.concurrent.ForkJoinPool類,發現這個版本必須使用jdk1.7以上,1.6沒有這個包。折騰半天,終於幾個工程沒變異錯誤了,向前邁進了一步。
❻ 如何正確的閱讀源代碼
除了閱讀代碼以外, 沒有更好的方法. 7.在尋找bug時, 請從問題的表現形式到問題的根源來分析代碼. 不要沿著不相關的路徑(誤入歧途). 8.我們要充分利用調試器|編譯器給出的警告或輸出的符號代碼|系統調用跟蹤器|資料庫結構化查詢語言的日誌機制|包轉儲工具和Windows的消息偵查程序,
定出的bug的位置. 9.對於那些大型且組織良好的系統, 您只需要最低限度地了解它的全部功能, 就能夠對它做出修改. 10.當向系統中增加新功能時, 首先的任務就是找到實現類似特性的代碼, 將它作為待實現功能的模板. 11.從特性的功能描述到代碼的實現, 可以按照字元串消息, 或使用關鍵詞來搜索代碼. 12.在移植代碼或修改介面時, 您可以通過編譯器直接定位出問題涉及的范圍, 從而減少代碼閱讀的工作量. 13.進行重構時, 您從一個能夠正常工作的系統開始做起, 希望確保結束時系統能夠正常工作. 一套恰當的測試用例(test
case)可以幫助您滿足此項約束. 14.閱讀代碼尋找重構機會時, 先從系統的構架開始, 然後逐步細化, 能夠獲得最大的效益. 15.代碼的可重用性是一個很誘人, 但難以理解與分離, 可以試著尋找粒度更大一些的包, 甚至其他代碼. 16.在復查軟體系統時, 要注意, 系統是由很多部分組成的, 不僅僅只是執行語句. 還要注意分析以下內容:
文件和目錄結構|生成和配置過程|用戶界面和系統的文檔. 18.可以將軟體復查作為一個學習|講授|援之以手和接受幫助的機會. ++++++++++++++++++++ 第二章: 基本編程元素 ++++++++++++++++++++ 19.第一次分析一個程序時, main是一個好的起始點. 20.層疊if-else if-…-else序列可以看作是由互斥選擇項組成的選擇結構. 21.有時, 要想了解程序在某一方面的功能, 運行它可能比閱讀源代碼更為恰當. 22.在分析重要的程序時, 最好首先識別出重要的組成部分. 23.了解局部的命名約定, 利用它們來猜測變數和函數的功能用途. 24.當基於猜測修改代碼時, 您應該設計能夠驗證最初假設的過程. 這個過程可能包括用編譯器進行檢查|引入斷言|或者執行適當的測試用例. 25.理解了代碼的某一部分, 可能幫助你理解餘下的代碼. 26.解決困難的代碼要從容易的部分入手. 27.要養成遇到庫元素就去閱讀相關文檔的習慣; 這將會增強您閱讀和編寫代碼的能力. 28.代碼閱讀有許多可選擇的策略: 自底向上和自頂向下的分析|應用試探法和檢查注釋和外部文檔, 應該依據問題的需要嘗試所有這些方法. 29.for (i=0; i 30.涉及兩項不等測試(其中一項包括相等條件)的比較表達式可以看作是區間成員測試. 31.我們經常可以將表達式應用在樣本數據上, 藉以了解它的含義. 32.使用De Morgan法則簡化復雜的邏輯表達式. 33.在閱讀邏輯乘表達式時, 問題可以認為正在分析的表達式以左的表達式均為true; 在閱讀邏輯和表達式時, 類似地,
❼ c++源碼如何閱讀
看你的需求,如果你想知道他得用處,而不是具體的實現方法,那就著眼於對象,類,方法的作用上面,而不必看細致的東西,比如有幾個類,分別干什麼,他們有什麼屬性,方法,函數,只要看公開的,私有的不看,類之間的關系是什麼,怎麼互動的,就可以了,最好畫一個類圖 就更清楚了,
如果你要學習一下,看看怎麼實現的,你先有個大概的東西,比如想知道怎麼實現這個加密,你就去找那個類實現了,用那個方法實現的,
面向對象的方法設計模塊間的耦合度比較低,問題一般比較獨立
❽ 怎樣去閱讀一份PHP源代碼
這個回答建立在已經能運行程序的情況下。在這個情況下,基本上PHP框架都會有一個入口文件。如果想要了解這個框架源碼是怎麼運行的,內核內核怎麼跑的話,個人建議先從框架的一種最簡單的domo開始入手,從入口文件開始,遇到哪裡看不懂的情況下就在那個地方設定斷點,或者哪個不懂的PHP原生函數就網路這個函數的使用方法,一直到這個小DOMO可以跑通。之前在看workmen 或者swoole 的時候差不多就是這樣子去閱讀的。不過還是建議你針對你自己的需求先去使用框架做功能,然後根據功能去慢慢看源碼,這樣子效率會高些。
❾ 怎樣學習查看源代碼
主要是你的學習方法不對,我本身英語差的要命,當年中考英語考21分,高考考27分,但是學這個卻快的很,從開始學到基本熟練也才花了一個多月而已,而且是一邊工作一邊學而已我想你覺得難應該是太關注死記硬背這些樣式名了,你把精力和事件都放在記代碼上去了,就好比學英語記單詞一樣其實學習代碼你不要去記這些代碼的意思,你要從代碼的功能方面去學習,首先你先把一些常用的樣式代碼主要了解一下,一些深入的特殊的代碼可以往後再了解,因為只有你對這個有一定認識之後,你學習的速度效率才會更快
下面我就給你列舉一下一些常用的樣式並寫出用法來
1、背景background:url(images/bg.jpg)00no-repeat#000;是4個關於背景的簡寫;如:背景圖平:background-image、背景圖片位移:background-position、背景平鋪:background-repeat、背景顏色:background-color;2、高度height:100px、寬度width:100px;其中px是一個單位(像素),網頁是以像素為單位的3、邊框border:1pxsolid#000;是3個關於邊框的簡寫;邊框粗細:border-width:1px;邊框樣式(實線):border-style:solid;邊框顏色:border-color:#000;4、字體:font:bold12pxArial,Helvetica,sans-serif;分解開的話就是:字體粗細font-weight:bold;字體大小font-size:12px;字體樣式:font-family:Arial,Helvetica,sans-serif;字體行高line-height:20px;字體顏色color:#666;5、內邊距padding:10px20px30px40px;分解開就是上內邊距:padding-top:10px;右內邊距:padding-right:20px;下內邊距:padding-bottom:30px;左內邊距:padding-left:40px;6、外邊距margin:10px20px30px40px;分解開就是上外邊距:padding-top:10px;右外邊距:padding-right:20px;下外邊距:padding-bottom:30px;左外邊距:padding-left:40px;7、float:left;向左浮動以我這些年來的工作經驗,上面列舉的這些樣式是比較常用的樣式,我敢說只要了解上面這些樣式代碼的功能,做出一個頁面來是不成問題的
當然,我這里列舉的只是一些常用的,其他的樣式等你熟悉了再自己學習一下你可以用Dreamweaver來寫代碼,因為這個軟體有代碼提示功能,只要打代碼樣式的頭一個字體就會有相應的代碼樣式提示給你,只要你能夠大概的了解代碼的功能,也就沒必要把代碼全記住,做這行我都四五年了也不能完完全的寫出多少代碼的全稱,因為我根本沒有去記,我只要看到這個代碼就知道這個是做什麼用的就夠了有一點要提醒下你,你最好是把Dreamweaver當做一個輔助輸入工具,多鍛煉一些手寫代碼,這樣對自己學習很有幫助純手打,希望對你有幫助
❿ 為什麼以及如何閱讀源碼
對於這些問題,說到底主要是因為經驗不夠,而經驗主要從項目實踐中積累,所以招聘單位一般都會限定工作時間大於 3 年,因為這些人的項目經驗相對較豐富,項目中遇到的場景相對較多。
工作經驗的積累來自於年限與實踐,然而看源碼可以擴展我們的思路,這是變相增加我們經驗的不錯方法。雖然不能短時間內通過時間積累經驗,但是可以通過學習開源框架、開源項目來獲取。
另外進職場後一般都要先熟悉現有系統,如果有文檔還好,沒文檔的話就得自己去翻代碼研究。如果大家之前對閱讀源碼有經驗,那麼在研究新系統的代碼邏輯時就不會那麼費勁了。