最近看公司項目的代碼,很多,沒有頭緒,所以來請教下,項目是用純c寫的。

個人補充幾點,當時提問的時候是工作不久,就接觸了一個開源的項目linphone,做VOIP客戶端用的、公司的項目就是基於這個開源項目進行的、但是那確實是自己,自編程以來所接觸過的最大的項目了。個人總結幾點關於看代碼的心得:1. 對於基礎比較薄弱的同學、最好藉助IDE強大的跳轉功能進行代碼查看

2. 查看源代碼時,第一遍乃至於第二遍一定不能鑽的過深,開始的時候往往會因為一個小功能而打開了IDE十幾頁的標籤頁、如果你是這樣的,那麼你接下來看代碼會越來越亂,心神不寧、

3. 第一遍迅速瞭解這個開源項目是解決什麼問題的,另外TA是什麼技術解決這個問題的、如果你沒有聽過這些技術、最好事前科普下、4. 對所需要的技術有了大概的瞭解、下面就是第一遍瀏覽代碼了,藉助於開源項目的官方文檔、摸清楚開源項目的整體框架、哪個部分是負責網路通信的,哪個部分是負責邏輯的,等等,把每個大的模塊分出來、5. 第二遍讀代碼時、就可以從一個模塊開始看起了,這個時候你可以稍微仔細有些了、藉助IDE,下斷點,修改一些代碼,看看被你修改過的代碼會出現什麼樣的作用、6. 第三遍讀代碼,就要研究為瞭解決這個問題時,開源項目用了某項技術、你可以看到、這項技術是用什麼樣的代碼實現的、學TA代碼的寫法、命名規則、代碼風格、等等、


個人總結幾點關於看代碼的心得:1. 對於基礎比較薄弱的同學、最好藉助IDE強大的跳轉功能進行代碼查看2. 查看源代碼時,第一遍乃至於第二遍一定不能鑽的過深,開始的時候往往會因為一個小功能而打開了IDE十幾頁的標籤頁、如果你是這樣的,那麼你接下來看代碼會越來越亂,心神不寧、3. 第一遍迅速瞭解這個開源項目是解決什麼問題的,另外TA是什麼技術解決這個問題的、如果你沒有聽過這些技術、最好事前科普下、4. 對所需要的技術有了大概的瞭解、下面就是第一遍瀏覽代碼了,藉助於開源項目的官方文檔、摸清楚開源項目的整體框架、哪個部分是負責網路通信的,哪個部分是負責邏輯的,等等,把每個大的模塊分出來、

5. 第二遍讀代碼時、就可以從一個模塊開始看起了,這個時候你可以稍微仔細有些了、藉助IDE,下斷點,修改一些代碼,看看被你修改過的代碼會出現什麼樣的作用、

6. 第三遍讀代碼,就要研究為瞭解決這個問題時,開源項目用了某項技術、你可以看到、這項技術是用什麼樣的代碼實現的、學TA代碼的寫法、命名規則、代碼風格、等等、
我的個人習慣是從一個功能點入手,在功能點上設置斷點進行單步調試追蹤,藉助這個功能點把類與類,功能與功能之間的聯繫和層次理順。
目前我想到也在用的最好的方法就是,不明白就問,否則很容易浪費時間

比較基礎的幾點:

  1. 工程框架大概瞭解,即哪些是配置代碼哪些是各種聲明宏定義框架代碼,這些都可以略過
  2. 類圖 流程圖,可以先無腦畫類圖,畫完了對著類圖讀代碼,流程圖也就出來了,推薦流程圖而不是時序圖的原因是 後者一般比較複雜和繁瑣.

其實做到了上述兩點並不會產生什麼生產力,無論是問題定位還是需求分析都力不能及。上面只是一個前提,為了下面的步驟提供助力:

  1. 提問討論,為什麼這裡要獨立進程?為什麼這裡定時器是30分鐘,為什麼序列化結構定成當前這樣? 問的越多越能夠對著流程圖把細節想明白,如果有熟悉這部分模塊的同事,直接討論.
  2. 列出改進點:性能? 代碼組織? 內存消耗待提升? 不易擴展? 總之把這些都列出來,不一定要去修改(有些問題理論存在,實際上不一定對項目當前場景有任何影響,優先順序是極低的),以備不時之需.

經此上述兩點,基本上對當前這個項目(模塊)就有了一定的話語權了,可以參與討論和方案分析.目的達成.


所有的代碼都是建立在執行的基礎上,所以拿到代碼的第一件時間是運行起來。

然後熟悉流程,知道代碼能幹啥,就可以開始看代碼了。

看代碼要找到自己熟悉的地方開始,推薦使用source insight ,進行層級向上找到程序的入口,然後層級向下,找到程序的框架結構。

最後就可以詳細瞭解程序的細節,大約到這個程度就可以開始debug和實現新功能了。

當然以上是針對老手,新手的話,還是先去閱讀文檔和查閱相關的資料,然後找老手說下項目流程和注意事項了。


我傻人的做法是, 閑的時候直接抄寫, 簡單暴力的方法, 抄的過程自然會想到一些, 如果涉及不深的模塊, 就連同依賴的一起看了, 再return繼續看. 當然main和各個模塊或大概架構流程先看下, 明白個大概.
第一步,跑起來第二步,順著執行順序,從 main 開始讀,邊讀可以邊 printf
1. 讀README,FAQ,Release Notes等文檔2. full build,sample code build and run3. 修改sample code或自己寫sample code,run4. debug核心code,在關鍵路徑加log或gdb單步跟蹤

5. 畫流程圖或UML圖

6. 和相關同事一起探討項目架構
個人看法是:首先,先了解項目的大概功能信息;然後,學會如何使用這個軟體,如何配置這時需要閱讀下維護文檔;第三,根據概設文檔瞭解程序的大致框架和各個大模塊的功能,最重要的就是知道每塊數據結構是怎樣設計的,知道為什麼每個結構為什麼這樣設計之後功能模塊閱讀就好理解很多了;第四,理解模塊的最簡單快速的方法就是自己調試或者通過修改查看效果,可以在測試主機上進行這樣的測試,相信你很快就會理解並掌握這個項目的;總結下,就是看文檔、讀結構、修改調試。

從整體把握,閱讀相關文檔 ,熟悉項目背景,再按照正常的閱讀方式,調試方式來熟悉。


推薦閱讀:
相關文章