一、源碼閱讀需求
在學習中,我們會需要了解,學習,使用一個框架,一個新的函數庫。在工作中,因為業務需求,因為性能問題,可能通過一個更高性能的工具,架構去優化我們的程序。
那么,問題就來了。網站下載了源碼,目錄一層一層,頭文件無數,打開之后又是一個函數上百行代碼,一個類可能有近千行代碼。看着都崩潰了,只想關機去靜靜。
那么,現在。就談談如何閱讀源碼的問題了。
二、源碼閱讀方法
認知過程:
①了解庫/框架的功能-->具體做法:找到相關文檔或者書籍,獲取庫/框架的功能簡介。知道他是干什么的。(相關知識儲備足夠了,那么學習這個框架就會事半功倍的)
②認識庫,能夠簡單使用庫-->具體做法:通過官方文檔或者工具,獲取框架的外部接口,嘗試在程序中使用它。這個過程可以是個深度優先、廣度優先方式。看個人學習了解方式和能力了(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
②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
有任何疑問或者改正之處,歡迎交流。