global

安装

安装GNU global,以ubuntu为例:

$ sudo apt install global

安装后有如下命令

  • gtags : 生成GNU global的数据库

  • global : 在shell命令行中进行查询

  • gtags-cscope : 在vim中利用 cscope一样的界面进行查询

生成数据库

生成GNU global数据库,以linux kernel为例:

$ make ARCH=arm gtags # 只生成arm的数据库

$ gtags               # 不建议使用,默认会生成所有arch的数据库

生成如下文件

  • GTAGS : definition database

  • GRTAGS: reference database

  • GPATH : path name database

查询

通过GNU global查询 函数在哪里定义 或 函数在哪里被调用等等,下面分别介绍shell, vimvscode是如何进行查询

A. 通过shell进行查询

$ global -x  <funcName> # 查找函数定义
$ global -rx <funcName> # 查找函数调用

B. 通过vim进行查询

首先,在/etc/vim/vimrc.local添加如下配置

set cscopeprg=gtags-cscope

if filereadable("GTAGS")
    cs add GTAGS
else
    let gtags_file=findfile("GTAGS", ".;")
    if !empty(gtags_file) && filereadable(gtags_file)
        exe "cs add" gtags_file
    endif
endif

nmap <C-@>g :cs find g <C-R>=expand("<cword>")<CR><CR> " Find function definition
nmap <C-@>c :cs find c <C-R>=expand("<cword>")<CR><CR> " Find function call

然后,用vim打开某一个文件后,就可以通过ctrl-@ g查询 函数在哪里定义,通过ctrl-@ c查询 函数在哪里被调用

C. 通过vscode进行查询

参考网址 : GNU GLOBAL Source Code Tag System

首先,安装 C/C++ GNU Global插件

然后,用vscode打开某一个文件后,就可以通过右键->xxx查询 函数在哪里定义 或 函数在哪里被调用

Last updated

Was this helpful?