cscope

安装

安装cscope,以ubuntu为例:

$ sudo apt install cscope

生成数据库

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

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

$ cscope -b -q -k -f cscope.out # 不建议使用,默认会生成所有arch的数据库

查询

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

A. 当通过vim进行查询

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

set cscopeprg=cscope

if filereadable("cscope.out")
    cs add cscope.out
else
    let cscope_file=findfile("cscope.out", ".;")
    let cscope_pre=matchstr(cscope_file, ".*/")
    if !empty(cscope_file) && filereadable(cscope_file)
        exe "cs add" cscope_file cscope_pre
    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查询 函数在哪里被调用

B. 通过vscode进行查询

首先,安装 scope4code插件

接着,配置xxx.code-workspacesettings属性,如下:

"scope4code.databasePath": "${workspaceRoot}/",
"scope4code.engineCommands": {
    "config_index": {
        "cscope": {
            "linux": 0
        }
    },
    "config": [
        {
            "find_cmd": "find ${src_path} -type f -name *.c -o -type f -name *.h -o -type f -name *.cpp -o -type f -name *.cc -o -type f -name *.mm",
            // "database_cmd": "cscope -b -q -k -f ${database_path}/cscope.out",
            "database_cmd": "make ARCH=x86 cscope",
            "find_all_ref": "cscope -q -k -f ${database_path}/cscope.out -L0 ${text}",
            "find_define": "cscope -q -k -f ${database_path}/cscope.out -L1 ${text}",
            "find_callee": "cscope -q -k -f ${database_path}/cscope.out -L2 ${text}",
            "find_caller": "cscope -q -k -f ${database_path}/cscope.out -L3 ${text}",
            "find_text": "cscope -q -k -f ${database_path}/cscope.out -L4 ${text}"
        }
    ]
}

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

Last updated

Was this helpful?