閱讀 C/C++ 原始碼的好幫手

最近有需求讀 C/C++ 的東西, 試了 ctags, cscope 覺得不理想。問了一下收到許多回應 (G+ 、plurk ), 真是太感謝大家了, 減少入門摸索的時間。

試用的感想如下:

grep

  • 優點: 好上手
  • 缺點: 陽春
  • 安裝: 內建於 Linux

gtags

  • 優點: 可找 caller 和 callee
  • 缺點: 因為索引檔是由 ctags 來的, 會漏東西; 執行方式也有些不便
  • 安裝: 程式很久沒人更新了, 要做一些修正才裝得起來
    • 參照官網指示
    • make 時看少了什麼 header, 手動補一下 header
    • 然後 make 還是會失敗, 將 gas.py 的 "import as" 改為 "import asm", 下面用到的模組名也要跟著改, as.py 也要改為 asm.py。python 2.6 後 as 是 keyword
    • 編好後將幾個用到的 python scripts 第一行由 python2.4 改為 python

ack

  • 優點: 比 grep 容易使用, 省得配合一些 command 過濾檔案, 見官網的《Top 10 reasons to use ack instead of grep.》。而且還有彩色的輸出!!
  • 缺點: 因為沒建 index 的關係, 速度較 id-utils 慢, 我的測試情境要 3s, 而 id-utils 只要 0.006s
  • 安裝: curl http://betterthangrep.com/ack-standalone > ~/bin/ack && chmod 0755 !#:3

id-utils

  • 優點: 速度快, 和測 ack 同樣的情況, 建索引 5.3s, 之後搜尋瞬殺
  • 缺點: 介面沒有 ack 直覺易用, 我寫了個小程式 gj 以 id-utils 為底, - 提供彩色輸出和進一步過濾檔名的功能。
  • 安裝: Ubuntu 超容易, aptitude install id-utils

Eclipse CDT

  • 優點: 方便開新視窗看 caller、callee
  • 缺點: 不方便搭 vim 使用 (對 vim 重度使用者才有差); 建 index 有點久, 我的測試情境要數分鐘到十分鐘吧
  • 安裝: 結果這個是我試最久的, 因為不知怎麼建 index。參考官網 FAQ, 建索引前要先設 include dir path。我一直找不到 context menu, 結果它就是左側的那個專案清單。另外 Eclipse CDT 也會漏一些東西, C++ 特別嚴重。

結論

用 Eclipes CDT 方便平時快速跳到定義 輔以 id-utils + gj 確保不會漏東西。之後用一用再視需求來更新 gj 功能。 2011-12-16 Update

Eclipse CDT 的問題有一部份是我設錯, 詳細設法見用 Eclipse CDT 讀 C/C++ 原始碼。

2012-02-02 Update

留言裡有提到其它工具, 我還沒機會試, 有需要的人可以參考看看。 開發軟體的時候, 除提昇閱讀程式碼的能力外, 還需要瞭解許多東西, 見《在 Linux 下開發 C/C++ 的新手指南》。


书籍推荐