2011年5月14日 星期六

Source Navigator NG 介紹

Source Navigator NG

source navigator NG 是一個程式碼分析工具。

有了它,你可以編輯 source code,用它顯示 classes 跟 functions 以及 members (instance variables 與 instance methods 等) 之間的關係,而且還可以顯示 call trees。

就像地圖導航工具帶給人們的方便一樣,你可以用 source navigator NG 導覽 source code,很輕鬆就能找到 functions, variables 和 macros 等 symbols 的宣告(declarations)與實作(implementations)的位置。

這種商品市面上也有,比較知名的應屬 source insight。source navigator NG 則是 GPL 自由軟體,固然如此,相較於 source insight,source nagivator NG 其實毫不遜色。

source nagivator NG 是 Source Navigator 的下一代,它改善了效能,也比較好用。

下載軟體

source nagivator NG 可在底下的網址取得,有 Linux 和 Windows 的版本可供選擇:

http://sourcenav.berlios.de/

軟體不需要安裝,解開壓縮檔後,打開執行檔即可使用。執行檔路徑在:

SN-NGxx\bin\snavigator.exe

建立 Project

1. 執行 snaviator.exe,啟動畫面如下:

image
▲ 這個視窗會列出所有 Projects,目前還沒有 Project,所以是空的

2. 點 [New Project…] 建立要分析的程式專案:

image

其中:

  • 「Project File」是專案檔名
  • 「Add Directory」則是要分析的程式碼資料夾

按下 [OK] 後,source navigator NG 就會開始掃瞄程式並建立分析用的資料庫:

image

3. 掃瞄完成後,便可以開始導覽程式碼。主畫面如下:

image
▲ 主畫面稱為 Symbol Browser

Symbol Browser 的檢視方式有很多種,例如 Files, functions, macros, typedefs 等,上圖是 Files 檢視方式,其它檢視方式可在工具列或 View 選單中找到:

image

例如 File 或 function 或 macro 或 class,在任何你關注的 symbol 上點兩下 source navigator 便會開啟內建的編輯器讓你編輯程式碼,而且立即跳到 symbol 所在的位置:

image

你也可以設定外部編輯器(External Editor),方法是點選單 【View > Preferences】打開 Preferences 視窗,然後輸入外部編輯器執行檔的路徑。如下圖所示,我把 Notepad++ 設成 source navigator NG 的外部編輯器:

image
▲ 記得要用雙引號把 External Editor 執行檔路徑包起來 

一些畫面截圖(Screenshots)

在主畫面(symbol browser)上使用萬用字元(wildcards)挑選並顯示檔案:

 image

程式碼編輯視窗有語法高亮度顯示功能,而且還可以 (1) 選擇目前程式中的 symbol,以及 (2) 搜尋符號,如下圖所示:

image

xref 窗格顯示交叉參考的 functions,而且是多層次的(multi-level):

image

Grep 窗格中可以讓你用 regexp 來搜尋字串:

image

結語

source navigator NG 是一個程式碼分析工具,它可以幫助你導覽 source code,非常方便。除了 c 與 c++ 程式外,source navigator NG 也支援 java, python, tcl, vb, cobol, fortran 的程式。source navigator NG 是 GPL 自由軟體,可免費取得。

延伸閱讀

5 意見:

GCY 提到...
作者已經移除這則留言。
GCY 提到...

還不錯,來用用看有沒有比vim的plugin好用

Cooper Maa 提到...

有 Linux 版的。Tcl 在字串處理這方面的能力還蠻厲害的,source navigator NG 的字串搜尋應該就是用 Tcl 做的,而 GUI 則是用 Tk。

letoh 提到...

@GCY: vim 配合 ctags / cscope / global / taglist 應該不會輸 source navigator 太多

GCY 提到...

@letoh:我目前就是這樣的組合:)XD