使用Cscope跳转Android源码函数调用(包含内核)

前言:

通常情况下,使用SourceInsight跳转源码函数调用比较方便,但有的时候用到vim,vim功能很强大,但却不能进行函数跳转,需要借助cscope或者ctags。

安装ctags和cscopes:

sudo apt install ctags
sudo apt install cscope

生成数据库文件:

ctags执行选项:

ctags -R --c++-kinds=+px --fields=+iaS --extra=+q --exclude=pattern

–c+±kinds: 用于指定C++语言的tags记录类型, --c-kinds用于指定c语言的, 通用格式是 --{language}
–fileds: 用于指定每条标记的扩展字段域
–extra: 选项用于增加额外的条目: f表示为每个文件增加一个条目, q为每个类增加一个条目
–exclude: 在创建ctags的时候排除某些目录

vim ctag_cscope_db.sh

#! /bin/bash

echo "正在生成tags文件"
/usr/bin/ctags -R --fields=+lS .
if [[ $? == 0 ]]; then
	echo "生成tags文件成功"
	echo "$(readlink -f tags)"
else
echo "生成tags文件失败"
fi

echo "正在生成cscope.out"
find . \
	-name "out" -prune \
	-o -iname "*.s" -o -iname "*.h" \
	-o -iname "*.c" -o -name "*.cc" \
	-o -iname "*.cpp" -o -iname "*.cxx" \
	| sed -n "s%^\.%$PWD%p" \
	> cscope.files
	
/usr/bin/cscope -Rbq
if [[ $? == 0 ]]; then
	echo "生成cscope.out成功"
	echo "$(readlink -f cscope.out)"
else	
	echo "生成cscope.out失败"
fi

在Android源码顶层目录执行后生成cscope.files、 cscope.in.out、 cscope.out、 cscope.po.out、 tags

Ctrl+] //跳转到所有调用此函数的地方,以及定义的地方
Ctrl+t //回退
1

配置/etc/vim/vimrc:

  1. 第一个命令里的分号是必不可少的,这个命令让vim首先在当前目录里寻找tags文件,如果没有找到tags文件,就到父目录中查找,一直向上递归。

  2. 因为tags文件中记录的路径总是相对于tags文件所在的路径,所以要使用第二个设置项来改变vim的当前目录。

     set tags=tags;
     set autochdir
    
  3. 子目录使用cscope跳转

     function! LoadCscope()
     let db = findfile("cscope.out", ".;")
     if (!empty(db))
     	let path = strpart(db, 0, match(db, "/cscope.out$"))
     	set nocscopeverbose " suppress 'duplicate connection' error
     	exe "cs add " . db . " " . path
     	set cscopeverbose
     	" else add the database pointed to by environment variable 
     elseif $CSCOPE_DB != "" 
     	cs add $CSCOPE_DB
     endif
     endfunction
     au BufEnter /* call LoadCscope()
    
  4. 如果想要使用Taglist。(选配)
    1

    1. 安装taglist

    2. https://sourceforge.net/projects/vim-taglist/files/下载taglist安装包。

    3. 进入/etc/vim/目录,将taglist安装包解压,将解压后的/doc和/plugin目录复制到该目录下

    4. vim vimrc(下面的单引号表示注释,如果想改变配置,将相应"去掉)

       "设置taglist打开关闭的快捷键F8
       nnoremap <silent> <F8> :TlistToggle<CR>
      
       filetype plugin indent on
       let Tlist_Inc_Winwidth = 1
       let Tlist_Auto_Highlight_Tag = 1
       let Tlist_Highlight_Tag_On_BufEnter = 1
      
       "设置ctags路径
       let Tlist_Ctags_Cmd = '/usr/bin/ctags'
      
       "启动vim后自动打开taglist窗口
       let Tlist_Auto_Open = 1
      
       "不同时显示多个文件的tag,仅显示一个
       let Tlist_Show_One_File = 0
      
       "taglist为最后一个窗口时,退出vim
       let Tlist_Exit_OnlyWindow = 1
      
       "taglist窗口显示在右侧,缺省为左侧
       "let Tlist_Use_Right_Window =1
      
       "设置taglist窗口大小
       "let Tlist_WinHeight = 100
       "let Tlist_WinWidth = 40
      
       "设置taglist打开关闭的快捷键F8
       noremap <F8> :TlistToggle<CR>
      
       "更新ctags标签文件快捷键设置
       noremap <F6> :!ctags -R<CR>
      
    5. vim一般配置(选配)

       :set nocompatible "VIM而不是VI
       :set history=50 "历史记录50条
       :set fenc=utf-8 "设置默认语言为8位unicode
       :set hls "查找文本高亮
       :set ruler "显示当前位置
       :set autoindent "自动缩进
       :set smartindent "智能缩进
       :set cindent "缩进
       :set tabstop=4 "硬TAB
       :set softtabstop=4 "软TAB
       :set shiftwidth=4 "缩进空格数
       :set expandtab "空格替换TAB
       :set smarttab "智能TAB
       :set showmatch "显示匹配
       :set matchtime=5 "1/10秒延迟
       :set hlsearch "高亮搜索
       :set incsearch "搜索中匹配
       :set tags=tags; "ctags
       :set autochdir "ctags
       filetype on "打开文件类型检测
       colorscheme delek "主题
       "colorscheme evening "主题
       syntax on "语法高亮
      

转载请注明出处:http://www.wolfnx.com/2018/12/19/AndroidSourceUseCscope

作者 : wolfnx
邮箱 : wolfnx@outlook.com
邮箱2 : lostnx@gmail.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值