閱讀開源項目的源代碼是提高自己編程能力的好方法,而有一個好的源代碼閱讀工具無疑能夠讓你在閱讀源代碼時事半功倍。之前找過不少源代碼閱讀工具,像SourceInsight、sourcenav、scitools等,但是這些工具要么是收費的,要么只有windows版本。sourcenav雖然是開源的,但是個人覺得不是很好用。直到最近畢設時老師要求用doxygen生成代碼文檔,在使用doxygen的過程中,突然發現這個東西配合上瀏覽器其實就是一個很好的源碼閱讀工具,所以給大家推薦一下。
廢話不多說,相信大家都知道doxygen是一個用來生成源碼文檔的工具,不少有名的開源項目想opencv,boost都是用它來生成文檔的。雖然正常要生成一份詳細的文檔需要我們在代碼中按照一定格式寫注釋,但是doxygen也能夠從沒有這些注釋的源碼中抽取出函數定義、類定義、變量定義、宏定義等信息,並且能夠提供交叉引用,為我們閱讀代碼提供方便。我這里用一個開源項目Google Protobuf來做一下演示。
首先按照安裝教程(http://www.stack.nl/~dimitri/doxygen/manual/install.html)安裝好doxygen。
進入存放項目的目錄,運行doxygen -g命令,生成Doxygen配置文件Doxyfile
Doxygen配置文件默認名為Doxyfile,這里面是一些格式為 KEY = VALUE的鍵值配置屬性,如下圖。每一個屬性前都有相應的說明,doxygen會根據這些配置屬性來生成文檔。
我們要編輯器打開Doxyfile后設置如下屬性 (因為文件比較大,需要使用編輯器的查找功能找到這些屬性。
INPUT = protobuf-2.5.0/src (設置項目源代碼目錄的路徑,相對於Doxyfile的位置) PROJECT_NAME = "ProtoBuf" (項目名默認為My Project) OUTPUT_DIRECOTRY = doc (設置文檔輸出路徑,相對於Doxyfile的位置) RECURSIVE = YES (設置遞歸查找所有子目錄,默認NO只查找當前目錄) EXTRACT_ALL = YES (設置抽取代碼中所有實體,默認NO只抽取有doxygen注釋的實體) SOURCE_BROWSER = YES (生成交叉引用) INLINE_SOURCES = YES (將源代碼包含進文檔,默認NO只包含聲明,不包含定義) OUTPUT_LANGUAGE = Chinese (設置文檔語言為中文)
設置后保存,運行doxygen命令生成文檔。
可以看到當前目錄多除了doc/html,和doc/latex目錄,分別包含了html格式和latex格式的文檔。我們在doc/html目錄下用瀏覽器打開index.html。可以看到代碼實體按命名空間,類,文件三種方式組織。其中類可以查看類列表,類索引,類繼承關系,和類成員等。
我們選擇google::protobuf::internal::ExtensionFinder類看看具體信息。
可以看到類繼承關系圖,成員函數,詳細描述下還有成員函數的函數原型和跳轉到函數定義的鏈接(截圖比較大就不發了)。
其中藍色的鏈接點擊后可跳轉到函數的具體實現處。
可以看到在查看具體實現時,所有的藍色鏈接都代表了項目中定義的實體,如函數,類,成員等。鼠標懸浮上可以看到簡要信息,也可以點擊跳轉到詳細信息。這樣在看源碼時遇到一個不清楚的東西就能夠隨時看到它的定義。再配合上瀏覽器原有的返回,跳轉,在新標簽打開頁面等功能,閱讀源碼就變得十分方便了。
好了,我的介紹就到這,有興趣的朋友可以自己試一試,謝謝~