CSDN |
GitHub |
Ubuntu 安裝 GNU Global(gtags) 閱讀Linux核心源碼 |
AderXCoding/system/tools/global |
本作品採用知識共用署名-非商業性使用-相同方式共用 4.0 國際許可協議進行許可, 轉載請註明出處, 謝謝合作
因本人技術水平和知識面有限, 內容如有紕漏或者需要修正的地方, 歡迎大家指正, 也歡迎大家提供一些其他好的調試工具以供收錄, 鄙人在此謝謝啦
1 Global 簡介 1.1 背景
之前介紹過很多網頁代碼閱讀工具了, 最近想看 Linux 核心代碼, 本來想搭建一個 LXR 伺服器.
Ubuntu14.04搭建LXR本機伺服器閱讀Linux核心代碼
工具之OpenGrok的搭建方法
Ubuntu環境下OpenGrok的安裝及使用
但是想到了公司內部使用的 GNU GLOBAL 搭建的伺服器. 遂百度之. 發現搭建 GLOBAL 比 LXR 簡單的多, 而且同樣功能強大, 適合個人或者小團隊閱讀代碼. 既然 LXR 這條路走不通, 那咱就換條路走走. 果斷用 GLOBAL 替代 LXR. 1.2 Global
摘要 : GNU GLOBAL 是一個原始碼標記系統, 以同樣的方式工作在不同的環境中, 如 Emacs 編輯器, Vi 編輯器, Less viewer, Bash shell, 以及各種 網頁瀏覽器等等.
GNU GLOBAL 是一個原始碼標記系統, 能夠很方面的進行代碼閱讀和代碼索引. GNU GLOBAL 以同樣的方式工作在不同的環境中, 如 Emacs 編輯器, Vi 編輯器, Less viewer, Bash shell, 以及各種 web瀏覽器等等
使用 GNU GLOBAL, 在你的原始碼中,你可以找到不同的對象並能夠很輕鬆的移動它們, 如函數、宏、結構、類等. 這對大型項目非常有用, 特別是那種包含許多子目錄, 許多 #ifdef 和很多 main( ) 函數的項目.
它類似於 ctags 或 etag, 但有兩點不同 :
獨立的編輯器
處理定義和參考的能力
GNU GLOBAL 可以運行在 UNIX (POSIX) 相容的系統, 比如GNU 和 BSD. GNU GLOBAL 支援的語言很多, 它自身支援 C, C++, Yacc, Java, PHP4 和組合語言中符號的定義和引用, 還通過 Exuberant Ctags 支援 40餘種語言的符號定義的索引.
作為 GNU 項目的一部分, GNU GLOBAL 是免費軟體, 你可以自由複製, 修改和重新發布該計划下的 GNU GPL.
Unix/Linux 使用者可以直接從倉庫進行安裝. 安裝完不需要進行其它設定.
Windows 使用者可以點擊這裡下載。
更多關於 GNU GLOBAL 的介紹請查看這裡:
https://www.gnu.org/software/global/ 2 安裝 2.1 使用內建的源安裝 global
sudo apt-get install global
2.2 編譯安裝global
Ubuntu 14.04 內建的 GLOBAL 版本是 5.7.1 但是官網都已經是 6.6. 因此如果想用最新版的 GLOBAL, 就需要自己編譯安裝. 安裝編譯依賴的庫
sudo apt build-dep globalsudo apt install libncurses5-dev libncursesw5-dev
移駕至 GNU GLOBAL 官方下載最新的 tar.gz 包並解開.
wget https://ftp.gnu.org/pub/gnu/global/global-6.6.tar.gz
編譯安裝
./configure --with-sqlite3 # gtags可以使用Sqlite3作為資料庫, 在編譯時間需要加這個參數make -j4sudo make install
3 使用 GLOBAL
假定接下來我們要產生 Linux Kernel 的解析 html
執行
git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git
當然也可以直接下載 linux kernel tar 包到本地後解壓縮.
進入 Linux Kernel 所在的目錄 執行 gtags 產生索引資料
# 產生tag檔案gtags –v
當然,也可以加上 --sqlite3 參數, 下面是 —help 給出的參數協助資訊.
Use Sqlite 3 API to make tag files. By default, BSD/DB 1.85 API is used.To use this option, you need to invoke configure script with--with-sqlite3 in the build phase.
tag 檔案產生後, 執行 htags 命令產生 HTML 檔案.
htags -DfFnva -m "指定main函數的名稱" -t '這裡填入你想要的首頁title'
3.2 佈建服務
GLOBAL 內建了一個 HTTP SERVER, 可以直接使用 htags-server 啟動
如果直接運行 htags-server, 我發現外網無法訪問我的 GLOBAL 網頁伺服器, 看了下協助檔案, 執行以下代碼 :
htags-server –b ip地址 連接埠號碼
如果不填連接埠號碼, 預設連接埠 8000, 如果你要在 8080連接埠開啟服務, 好像要 sudo, 否則報錯, 不知何故.
如果希望使用 Apache 服務了來訪問 web 服務, 則需要在 htags 的時候添加 -D 或者 -f 選項.
更多協助資訊,請參考—help或查閱官方文檔。
官方文檔:http://www.gnu.org/software/global/globaldoc.html 3.3 累加式更新
GLOBAL 支援累加式更新, global -u 這個命令會自動向上找到 project/GTAGS, 並更新其內容. 而 gtags 的優勢就在這裡, 累加式更新單個檔案的速度極快, 幾乎是瞬間完成.
global -vu
或者
gtags -iv
4 參考資料
GNU GLOBAL Source Code Tag System瀏覽源碼,很方便
在Emacs中使用GNU Global閱讀代碼
vim中使用GNU Global
GNU Global源碼分析工具使用筆記
介紹一下gnu global,比cscope更方便更快速的索引工具
Ubuntu 14.04 安裝最新版 gnu global (gtags)
本作品/博文 ( AderStep-紫夜闌珊-青伶巷草 Copyright ©2013-2017 ), 由 成堅(gatieme) 創作.
採用知識共用署名-非商業性使用-相同方式共用 4.0 國際許可協議進行許可. 歡迎轉載、使用、重新發布, 但務必保留文章署名成堅gatieme ( 包含連結: http://blog.csdn.net/gatieme ), 不得用於商業目的.
基於本文修改後的作品務必以相同的許可發布. 如有任何疑問,請與我聯絡.