1. 程式人生 > >如何閱讀開原始碼

如何閱讀開原始碼

分析一個原始碼,一個有效的方法是:

  1、閱讀原始碼的說明文件,比如本例中的README, 作者寫的非常的詳細,仔細讀過之後,在閱讀程式的時候往往能夠從README檔案中找到相應的說明,從而簡化了源程式的閱讀工作。

  2、如果原始碼有文件目錄,一般為doc或者docs, 最好也在閱讀源程式之前仔細閱讀,因為這些文件同樣起了很好的說明註釋作用。

  3、從makefile檔案入手,分析原始碼的層次結構,找出哪個是主程式,哪些是函式包。這對於快速把握程式結構有很大幫助。

  4、從main函式入手,一步一步往下閱讀,遇到可以猜測出意思來的簡單的函式,可以跳過。但是一定要注意程式中使用的全域性變數(如果是C程式),可以把關鍵的資料結構說明拷貝到一個文字編輯器中以便隨時查詢。

  5、分析函式包(針對C程式),要注意哪些是全域性函式,哪些是內部使用的函式,注意extern關鍵字。對於變數,也需要同樣注意。先分析清楚內部函式,再來分析外部函式,因為內部函式肯定是在外部函式中被呼叫的。

  6、需要說明的是資料結構的重要性:對於一個C程式來說,所有的函式都是在操作同一些資料,而由於沒有較好的封裝性,這些資料可能出現在程式的任何地方,被任何函式修改,所以一定要注意這些資料的定義和意義,也要注意是哪些函式在對它們進行操作,做了哪些改變。

   7、在閱讀程式的同時,最好能夠把程式存入到cvs之類的版本控制器中去,在需要的時候可以對原始碼做一些修改試驗,因為動手修改是比僅僅是閱讀要好得 多的讀程式的方法。在你修改執行程式的時候,可以從cvs中把原來的程式碼調出來與你改動的部分進行比較(diff命令), 可以看出一些原始碼的優缺點並且能夠實際的練習自己的程式設計技術。

  8、閱讀程式的同時,要注意一些小工具的使用,能夠提高速度,比如vi中的查詢功能,模式匹配查詢,做標記,還有grep,find這兩個最強大最常用的文字搜尋工具的使用。

  對於一個Unix/Linux下面以命令列方式執行的程式,有這麼一些套路,大家可以在閱讀程式的時候作為參考。

  1、在程式開頭,往往都是分析命令列,根據命令列引數對一些變數或者陣列,或者結構賦值,後面的程式就是根據這些變數來進行不同的操作。

  2、分析命令列之後,進行資料準備,往往是計數器清空,結構清零等等。

  3、在程式中間有一些預編譯選項,可以在makefile中找到相應部分。

  4、注意程式中對於日誌的處理,和除錯選項開啟的時候做的動作,這些對於除錯程式有很大的幫助。

  5、注意多執行緒對資料的操作。

相關推薦

如何有效的閱讀原始碼

一、初步瞭解 1.在下載原始碼之後,先看下程式碼目錄組織結構,如base代表基礎庫,net代表網路庫等我 2.開始閱讀框架的原始碼之前,先去google蒐集下資料: 這個框架是解決了什麼問題?都是用了什麼技術? 分為多少個模組,每個模組之間有什麼聯絡? 儘量看官網英文的資料,

如何閱讀原始碼

分析一個原始碼,一個有效的方法是:  1、閱讀原始碼的說明文件,比如本例中的README, 作者寫的非常的詳細,仔細讀過之後,在閱讀程式的時候往往能夠從README檔案中找到相應的說明,從而簡化了源程式的閱讀工作。  2、如果原始碼有文件目錄,一般為doc或者docs, 最好也在閱讀源程式之前仔細閱讀,因為這

如何分析/閱讀一個陌生/原始碼

拿到程式碼的時候 1、最好先看目錄結構並找到配置檔案 2、以自己的開發經驗去判斷大概的程式架構,理清楚是否為單點入口, 3、讓把程式執行起來 沒有資料庫的情況下執行起來可能會錯誤很多,不過這些錯誤可以引導你對程式理解,對著錯誤提示,跟蹤程式碼脈絡,很容易

如何閱讀比較大的原始碼

1 反覆地使用軟體,熟釋軟體的組成檔案和軟體功能,注意IE位址列內的地址變化;2 開啟資料庫檔案或存放資料的XML檔案,參照資料字典瞭解各個表和欄位的資料含意,   如果沒有資料字典,就執行軟體輸入資料,參照所輸入的資料,瞭解各個表和欄位的資料含意;3 利用Visio進行反向

基於java開發的原始碼GPS北斗位置服務監控平臺

最近在研究位置服務平臺,基於全球衛星定位技術(GNSS)、網際網路技術、空間地理資訊科技(GIS)、3G/4G無線通訊技術,面向全國公眾使用者建立大容量、實時、穩定的位置資訊服務運營平臺。實現管理目標的實時位置跟蹤,歷史軌跡查詢,超速、越區、防盜搶等報警, 遠端控制、油量監控,資料統計分析與報表等功能。平臺採

原始碼利器—用Graphviz + CodeViz生成C/C++函式呼叫圖(call graph)

一、Graphviz + CodeViz簡單介紹 CodeViz是《Understanding The Linux Virtual Memory Manager》的作者 Mel Gorman 寫的一款分析C/C++原始碼中函式呼叫關係的open source工具(類似的ope

【活動釋出】捷微H5-微信新年砍價活動,原始碼釋出了

活動名稱: 微信新年砍價 適用專案: 捷微H5活動平臺 原始碼下載: http://yun.jeecg.org/pmall/detail/924D63E4F73B4387B75DE9B8545136C5 視訊教程: https://pan.baidu.com

逐行閱讀redux原始碼(一) createStore

寫在最前面 本文面對有redux使用經驗,熟知redux用法且想了解redux到底是什麼樣的一個工具的讀者,so,希望你有一定的: 工程結構基礎 redux(react-redux)使用基礎 這會幫助你更快的理解。 redux是什麼 Redux是一個應用狀態管理工具,其工作流程可以參照

閱讀HBase原始碼的正確姿勢建議

引用:https://mp.weixin.qq.com/s/x4QV-wEvAkJXMGp8kd0yBQ 感覺這篇文章實在太好,轉載一下。 關於如何閱讀開源社群原始碼,最近陸續有同學過來問我這個問題。前段時間,在HBase技術交流群裡,大家也討論過一些零散的方法,但都不繫統。藉著這個問題,我也認真回顧了一下

深度學習之---語義分割+視訊分割 原始碼文獻集合

語義分割 Light-Weight RefineNet for Real-Time Semantic Segmentation BMVC 2018 https://github.com/DrSleep/light-weight-refinenet 語義分割 ESPNet: Efficient S

如何閱讀java原始碼

剛才在論壇不經意間,看到有關原始碼閱讀的帖子。回想自己前幾年,閱讀原始碼那種興奮和成就感(1),不禁又有一種激動。 原始碼閱讀,我覺得最核心有三點:技術基礎+強烈的求知慾+耐心。 說到技術基礎,我打個比方吧,如果你從來沒有學過Java,或是任何一門程式語言如C++,一開始去啃《Core Java》,

(一)turtlebot3學習,執行的原始碼解析

1.檔案解析和系統執行思路 turtlebot3要動起來,需要執行一些程式.下面對執行的程式進行解析 (1)啟動鐳射和控制命令傳送程式及感測器接收程式 roslaunch turtlebot3_bringup turtlebot3_robot.launch 這個檔案包括下面

逐行閱讀redux原始碼(二)combineReducers

前情提要 逐行閱讀redux原始碼(一)createStore 認識reducers 在我們開始學習原始碼之前,我們不妨先來看看何謂reducers: 如圖所見,我們可以明白, reducer 是用來對初始的狀態樹進行一些處理從而獲得一個新的狀態樹的,我們可以繼續從其使用方

[原始碼與資料集]文字檢測與識別

原文連結:http://valser.org/thread-1200-1-1.html 下面有些連結好像無法訪問,先存著在說吧~ 端到端場景文字識別 M. Liao, B. Shi, X. Bai, X. Wang, W. Liu. TextBoxes: A f

alphazero 五子棋原始碼分析

1目的 學習和理解alphago 演算法 相關學習材料 https://github.com/chiefzzs/alphago_learnning/ 參考:https://github.com/junxiaosong/AlphaZero_Gomoku 2學習方式

聲紋識別原始碼工具

聲紋識別,也稱為說話人識別,主要的開源工具有: 1.MSR Identity Toolkit ,微軟開源的工具箱,MATLAB版本,包含GMM-UBM和I-vector的demo,簡單易用。 2.Alize,主要包括GMM-UBM、I-vector and JFA三種傳統的方法,C++版,簡單易

初步閱讀EPOLL原始碼

資料結構 函式 epoll_create epoll_ctl ep_insert epoll_wait 資料結構 //

Rcnn 原始碼詳細圖解

目標檢測 基於region proposal(候選區域)的RCNN系列:RCNN、Fast RCNN、Faster RCNN、FPN 基於區域劃分(單次檢測器)的YOLO、SSD、RetinaNet 基於強化學習的AttentionNet等,還有最新的Mask RCNN。 R-CN

mtcnn python 原始碼詳細圖解

開原始碼地址:https://github.com/kpzhang93/MTCNN_face_detection_alignment 程式碼詳細圖解:持續更新中 感覺自己陷入了程式碼細節誤區,本著時間緊任務重的理念,加上本人能力有限,暫時無法完成細節程式碼圖解,但是可以簡單寫一下自己兩週

【轉】原始碼審計工具備忘

開源和非商業公司 2.3.1.1 .NET (C#, VB.NET and all .NET compatible languages) • Reflector.CodeMetrics — (an add-in for the essential Reflector)  • C