歡迎您光臨本站 註冊首頁

Source Insight3.0: Linux源代碼閱讀的利器

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  Source Insight3.0: Linux源代碼閱讀的利器


周忠達 (zero421@163.com)
軟體工程師

閱讀源代碼是鑽研技術的最佳手段,而Linux提供了一個龐大的源代碼庫,但是,由於缺乏良好的源代碼閱讀工具,使得閱讀Linux源代碼尤其是內核源代碼十分困難,在本文中,筆者向大家推薦一個優秀的源代碼閱讀工具,並介紹了它的使用方法。
作為一個開放源代碼的操作系統,Linux附帶的源代碼庫使得廣大愛好者有了一個廣泛學習、深入鑽研的機會,特別是Linux內核的組織極為複雜,同時,又不能像windows平台的程序一樣,可以使用集成開發環境通過察看變數和函數,甚至設置斷點、單步運行、調試等手段來弄清楚整個程序的組織結構,使得Linux內核源代碼的閱讀變得尤為困難。

當然Linux下的vim和emacs編輯程序並不是沒有提供變數、函數搜索,彩色顯示程序語句等功能。它們的功能是非常強大的。比如,vim和emacs就各自內嵌了一個標記程序,分別叫做ctag和etag,通過配置這兩個程序,也可以實現功能強大的函數變數搜索功能,但是由於其配置複雜,linux附帶的有關資料也不是很詳細,而且,即使建立好標記庫,要實現代碼彩色顯示功能,仍然需要進一步的配置(在另一片文章,我將會講述如何配置這些功能),同時,對於大多數愛好者來說,可能還不能熟練使用vim和emacs那些功能比較強大的命令和快捷鍵。

為了方便的學習Linux源程序,我們不妨回到我們熟悉的window環境下,也算是「師以長夷以制夷」吧。但是在Window平台上,使用一些常見的集成開發環境,效果也不是很理想,比如難以將所有的文件加進去,查找速度緩慢,對於非Windows平台的函數不能彩色顯示。於是筆者通過在互聯網上搜索,終於找到了一個強大的源代碼編輯器,它的卓越性能使得學習Linux內核源代碼的難度大大降低,這便是Source Insight3.0,它是一個Windows平台下的共享軟體,可以從http://www.sourceinsight.com/上邊下載30天試用版本。由於Source Insight是一個Windows平台的應用軟體,所以首先要通過相應手段把Linux系統上的程序源代碼弄到Windows平台下,這一點可以通過在linux平台上將/usr/src目錄下的文件拷貝到Windows平台的分區上,或者從網上光碟直接拷貝文件到Windows平台的分區來實現。

下面主要講解如何使用Source Insight,考慮到閱讀源程序的愛好者都有相當的軟體使用水平,本文對於一些瑣碎、人所共知的細節略過不提,僅介紹一些主要內容,以便大家能夠很快熟練使用本軟體,減少摸索的過程。

安裝Source Insight並啟動程序,可以進入圖1界面。在工具條上有幾個值得注意的地方,如圖所示,圖中內凹左邊的是工程按鈕,用於顯示工程窗口的情況;右邊的那個按鈕按下去將會顯示一個窗口,裡邊提供游標所在的函數體內對其他函數的調用圖,通過點擊該窗體里那些函數就可以進入該函數所在的地方。



圖1 Source Insight界面圖

由於Source Insight實質上是一個支持多種開發語言(java,c ,c++等等)的編輯器,只不過由於其查找、定位、彩色顯示等功能的強大,而被我們當成源代碼閱讀工具使用。所以,為了有效的閱讀源程序,首先必須選擇功能菜單上的 「Project」選項的子菜單「New Project」新建一個項目,項目名稱可以自由選定,當然也可以選擇刪除(Remove)一個項目。當刪除一個項目的時候,並不刪除原有的源代碼文件,只是將該軟體生成的那些工程輔助文件刪除。設定之後,將會彈出一個對話框如圖2,接受默認選擇,如果,硬碟空間足夠,可以將第一個複選框選上,該選項將會需要與源代碼大致同等的空間來建立一個本地資料庫以加快查找的速度。



圖2 工程設置

點擊「OK」按鈕,接受選擇后,將會有一個新的對話框彈出,在這個對話框里,可以選擇將要閱讀的文件加入工程,一種方式是通過在File Name中輸入要閱讀源代碼文件的名稱,點擊「Add」按鈕將其加入,也可以通過其中「Add All」和「Add Tree」兩個按鈕可以將選中目錄的所有文件加入到工程中,其中「Add All」選項會提示加入頂層文件和遞歸加入所有文件兩種方式,而「Add Tree」相當於「Add All」選項的遞歸加入所有文件,可以根據需要使用,就我來說,更喜歡「Add Tree」一些。由於該程序採用了部分打開文件的方式,沒有用到的文件不會打開,所以,加入數千個文件也不用擔心加入的文件超出程序的所能容忍的最大值,我就是採用「Add Tree」的方式將Linux2.4內核的四千五百九十一個文件加入的。



圖3 添加文件

加入文件后,點擊一個文件,可以出現使用界面,如圖4所示,其中,右邊的那個窗口(Linux Project,即工程窗口)預設按照字母順序列出當前工程中所有的文件。



圖4 工作窗口

點擊一個文件就可以打開該文件,顯示如圖5所示,進入到右邊的那個窗口分別可以以文件列表的方式,列出所有的文件,每個窗體下邊有一排按鈕,左邊的窗口(21142.c)從左至右分別為:按字母順序排列所有標記、按照文件中行數順序排列標記、按照類型排列標記、瀏覽本地文件標記、標記窗口屬性。右邊的窗口(Linux Project)從左至右分別為:按字母順序文件列表、顯示文件夾、按照文件類型歸類文件、全部文件的所有標記列表、按照標記類型歸類標記、跳轉到定義處、顯示標記信息、瀏覽工程標記、查找函數調用、工程屬性,其中全部文件的所有標記列表選項可能要一段時間抽取標記,同步到資料庫去,如果開始選擇了建立標記資料庫,將會在今後節省同步時間,最有用的莫過於瀏覽標記信息和查找函數調用,前者可以通過「Jump」按鈕在不同的地方查找同樣的標誌,還可以通過「Reference」按鈕結合後者進行全局的標記查找。





Reference功能是Source Insight的特色之一,它可以在速度極快的在整個工程中找到所有的標記,並且在該行程序的前邊加上紅色箭頭的小按鈕鏈接上。圖6是一個Reference搜索后的結果,它可以有兩種模式,一種集中顯示結果,圖6顯示的就是這種模式,在這種模式下,可以通過前邊的紅色箭頭小按鈕進入另外一種模式,該標記的具體的所在處,也可以通過標記的具體所在處點擊紅色箭頭小按鈕進入警種模式,還可以通過工具條上的兩個紅色小箭頭直接在第二種模式下前後移動,察看相應信息。它的這個強大的功能使得閱讀Linux源程序有如神助。但是要注意的是,當進行了第二次「Reference」時,它會提示你將結果集附加在第一個結果集的後邊還是取代第一個結果集。如果選擇前者,不能對結果集根據前後兩次搜索結果進行分類,然後在其子類里進行移動,只能在整個結果集里移動;如果,選擇後者,結果集將會被替換為第二次搜索的結果,略微有些不方便。



圖6 Reference的搜索結果

當然,Source Insight 還提供了一些其他常見的便利。比如:右鍵菜單幾乎包含了程序的所有功能,可以在編輯窗口為程序加上行號,還可以統計整個工程的程序行數,當然還有功能強大卻用不上自動完成功能,似乎連它的30天試用期也是別有用心——可以迫使你儘可能快速的閱讀源程序,其他一些技巧大家可以在使用過程中慢慢摸索。怎麼樣?愛好讀源代碼的朋友,不妨馬上去下載一個,去開始我們的Linux內核探險之旅吧

參考資料

Source Insight幫助

關於作者


周忠達,男,工學學士,2001年畢業於北方交通大學計算機科學與技術系。畢業后在中關村某合資系統集成公司擔任軟體工程師、系統分析員。對操作系統、網路編程、組件技術、圖形圖像處理等領域頗感興趣,可以通過zero421@163.com與他聯繫。



[火星人 ] Source Insight3.0: Linux源代碼閱讀的利器已經有680次圍觀

http://coctec.com/docs/linux/show-post-67783.html