教你如何剖析源碼


一、源碼閱讀需求

  在學習中,我們會需要了解,學習,使用一個框架,一個新的函數庫。在工作中,因為業務需求,因為性能問題,可能通過一個更高性能的工具,架構去優化我們的程序。

那么,問題就來了。網站下載了源碼,目錄一層一層,頭文件無數,打開之后又是一個函數上百行代碼,一個類可能有近千行代碼。看着都崩潰了,只想關機去靜靜。

那么,現在。就談談如何閱讀源碼的問題了。

二、源碼閱讀方法

  認知過程:

  ①了解庫/框架的功能-->具體做法:找到相關文檔或者書籍,獲取庫/框架的功能簡介。知道他是干什么的。(相關知識儲備足夠了,那么學習這個框架就會事半功倍的)

  ②認識庫,能夠簡單使用庫-->具體做法:通過官方文檔或者工具,獲取框架的外部接口,嘗試在程序中使用它。這個過程可以是個深度優先、廣度優先方式。看個人學習了解方式和能力了(ps:a.接收能力強,那么你可以嘗試將大致的功能都嘗試調用,全局體驗,了解整個庫/框架的使用,作用,而后深入剖析。

        b.如果你是個可以做到深入,能鑽進去的人,那么你就通過深度優先方式,逐個模塊的深入學習。然后慢慢的熟悉整個框架)

  ③閱讀源碼,了解整個框架/抽離核心,實現簡潔版-->這個過程可能對不同的人就有差距了,深入理解的,那么就可能做到抽離框架核心,實現簡潔版,獲取框架思想,並且做到框架功能優化,提交bug等。而一般點,那就是熟悉框架結構,了解功能接口,在學習工作中使用。當然,這樣也許在程序中出現某些bug時,就不能准確定位錯誤並改進了。

  ④第三個過程其實是一個漫長的過程,還要能夠保持足夠的耐心動力去探索。可以具體划分為:

    a.根據目錄層次,將整個框架進行模塊划分認知,了解模塊間耦合關系。

    b.進入目錄,學習一個模塊的實現細節,這時。可以選擇,拷貝一份源碼,閱讀同時加入注釋。

    c.遇到類間關系復雜的地方,可以通過UML類圖視覺體現關系,而后詳細學習。

boss 級方案

  利用UML工具,將源碼生成對應UML圖,了解類接口,成員函數以及類間關系。然后深入源碼(ps這個太強大,一般人駕馭不了)

  當然,vs調試過程也會有這個功能。http://jingyan.baidu.com/article/7f41ecec15092c593d095c17.html

三、工具推薦

  windows環境 源碼剖析工具:vs20XX (源程序閱讀,測試程序運行調試),everything(目錄文件搜索),source insight(源文檔閱讀,支持函數跳轉,體現調用樹,關聯性等)

  linux環境 工具推薦:vim + ctags + taglist  

四、工具簡單使用教程

  ①vs

http://blog.csdn.net/anzhongliu/article/details/48750637

http://feiger.cn/?p=4118

②everything

  這就是個簡單的目錄搜索工具,可以找到任何你有的東西哦。---保證讓你沒有小秘密可言。

③source Insight

  這個就是我們今天介紹的重點了

a.工具簡介:sourceinsight,英文解讀“深入到源代碼”該軟件只具有代碼的閱讀,編輯,簡單語法檢查功能,而不具有編譯功能。但是在閱讀大規模工程代碼時,sourceinsight在代碼導航,高亮注釋,顏色區分,代碼關聯等方面對於源碼閱讀都有 很好地幫助。

b.工具獲取http://www.sourceinsight.com/

c.基本使用

源碼導入/新建工程

project-->newProject(alt+shift+n)

添加項目文件:也就是你需要查看的源碼,在文件系統中找到需要添加的項目文件夾,然后點擊add All即可

彈窗提示是否遞歸添加子文件夾,選中,確定

至此,工程建立完成,那么。下面就看看具體如何使用軟件進行源碼閱讀了

比較常用的視圖,設置出來

 

對於比較長的文件,那么如果順序讀源文件肯定不方便了。這時,你應該發現左邊的的選項框了。

且文件瀏覽中,支持快速定位,跳轉等功能,這個窗口可以看到具體的類,函數調用關系,引用,使用位置等。

快捷方式:

Source Insight常用的快捷鍵: 
    Ctrl+= :Jump to definition 
    Alt+/ :Look up reference 
    F3 : search backward 
    F4 : search forward 
    F5: go to Line 
    F7 :Look up symbols 
    F8 :Look up local symbols 
    F9 :Ident left 
    F10 :Ident right 
    Alt+, :Jump backword 
    Alt+. : Jump forward 
    Shift+F3 : search the word under cusor backward 
    Shift+F4 : search the word under cusor forward 
    F12 : incremental search 
    Shift+Ctrl+f: search in project 
    shift+F8 : hilight word 
Source Insight的窗口操作: 
    project window Ctrl+O打開 
    symbol window Alt+F8打開和關閉 
    Contex Window 自定義鍵打開和關閉 
    Relation Window 自定義鍵打開 先鎖定再刷新聯系

 

最后,關於sourceinsight的使用,參考

http://www.cnblogs.com/olvo/archive/2012/05/04/2483424.html

http://blog.csdn.net/lyl_98/article/details/889706

有任何疑問或者改正之處,歡迎交流。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM