〖Linux〗(2013.08.02)使用ctag+cscope查看Android源代码

时间:2021-08-27 08:56:51

1. 安装ctags和cscope

sudo apt-get install -y exuberant-ctags cscope

2. vimrc中的配置

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" cscope setting
"
" cscope 使用方法:
" -R: 在生成索引文件时,搜索子目录树中的代码
" -b: 只生成索引文件,不进入cscope的界面
" -q: 生成cscope.in.out和cscope.po.out文件,加快索引
" -k: 在生成索引文件时,不搜索/usr/include目录
" -i: 保存文件列表的文件名不是cscope.files时需此项,可使用“-”
" -I dir: 在-I选项指出的目录中查找头文件
" -u: 扫描所有文件,重新生成交叉索引文件
" -C: 在搜索时忽略大小写
" -P path: 在以相对路径表示的文件前加上的path,
" 可不切换至数据库文件所在目录亦可使用
"
" cscope find的用法:
" cs find c|d|e|f|g|i|s|t name
" 0 或 s 查找本 C 符号(可以跳过注释)
" 1 或 g 查找本定义
" 2 或 d 查找本函数调用的函数
" 3 或 c 查找调用本函数的函数
" 4 或 t 查找本字符串
" 6 或 e 查找本 egrep 模式
" 7 或 f 查找本文件
" 8 或 i 查找包含本文件的文件
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
if has("cscope")
if has("unix")
set cscopeprg=/usr/bin/cscope
elsei has("win16") || has("win32")
" path\to\cscope
endif
set cscopetag " 使用<C-]>进行跳转
set cscopetagorder= " :cscope find g foo,然后:tselect foo
set nocscopeverbose " 添加数据库时不显示详细信息
" 添加cscope.out
if filereadable(expand("%:p:h") . "/" . "cscope.out")
let cscope_file = expand("%:p:h") . "/" . "cscope.out"
cs add cscope_file
elseif filereadable(expand("%:p:h") . "/../" . "cscope.out")
let cscope_file = expand("%:p:h") . "/../" . "cscope.out"
cs add cscope_file
elseif filereadable(expand("%:p:h") . "/../../" . "cscope.out")
let cscope_file = expand("%:p:h") . "/../../" . "cscope.out"
cs add cscope_file
elseif filereadable(expand("%:p:h") . "/../../../" . "cscope.out")
let cscope_file = expand("%:p:h") . "/../../../" . "cscope.out"
cs add cscope_file
elseif filereadable(expand("%:p:h") . "/../../../../" . "cscope.out")
let cscope_file = expand("%:p:h") . "/../../../../" . "cscope.out"
cs add cscope_file
endif
" 添加tags(can't use set tags in this section)
if filereadable(expand("%:p:h") . "/" . "tags")
let TAGSFILEN = expand("%:p:h") . "/" . "tags"
let &tags = expand(&tags . "," . TAGSFILEN)
elseif filereadable(expand("%:p:h") . "/../" . "tags")
let TAGSFILEN = expand("%:p:h") . "/../" . "tags"
let &tags = expand(&tags . "," . TAGSFILEN)
elseif filereadable(expand("%:p:h") . "/../../" . "tags")
let TAGSFILEN = expand("%:p:h") . "/../../" . "tags"
let &tags = expand(&tags . "," . TAGSFILEN)
elseif filereadable(expand("%:p:h") . "/../../../" . "tags")
let TAGSFILEN = expand("%:p:h") . "/../../../" . "tags"
let &tags = expand(&tags . "," . TAGSFILEN)
elseif filereadable(expand("%:p:h") . "/../../../../" . "tags")
let TAGSFILEN = expand("%:p:h") . "/../../../../" . "tags"
let &tags = expand(&tags . "," . TAGSFILEN)
endif
set cscopeverbose " 添加数据库时显示详细信息
endif

3. 生成tags和cscope.out的脚本

#!/bin/bash -
#===============================================================================
#
# FILE: cstags
#
# USAGE: ./cstags
#
# DESCRIPTION:
#
# OPTIONS: ---
# REQUIREMENTS: ---
# BUGS: ---
# NOTES: ---
# AUTHOR: linkscue(scue),
# ORGANIZATION:
# CREATED: 2013年08月02日 16时44分12秒 HKT
# REVISION: ---
#=============================================================================== echo "正在生成tags文件"
/usr/bin/ctags -R --fields=+lS .
if [[ $? == ]]; then
echo "生成tags文件成功"
echo "$(readlink -f tags)"
else
echo "生成tags文件失败"
fi echo "正在生成cscope.out"
find . -name "*.s" -o -name ".S" \
-o -name "*.c" -o -name "*.h" \
-o -name "*.cpp" -o -name "*.cxx" -o -name "*.cc" \
> cscope.files
/usr/bin/cscope -Rbq
if [[ $? == ]]; then
echo "生成cscope.out成功"
echo "$(readlink -f cscope.out)"
else
echo "生成cscope.out失败"
fi

〖Linux〗(2013.08.02)使用ctag+cscope查看Android源代码

〖Linux〗(2013.08.02)使用ctag+cscope查看Android源代码的更多相关文章

  1. 〖Linux〗(2013&period;08&period;02)VIM74b&plus;YouCompleteMe,VIM代码编辑器补全能手

    1. 编译和安装vim74b(参考:http://t.cn/zQa8R7h ) sudo apt-get install -y hgsvn libncurses5-dev libgnome2-dev ...

  2. 在eclipse中查看android源代码

    自己写了一个类MainAcvitivity extends Activity, 按F12(我把转到定义改成了F12的快捷键),转到Activity的定义,弹出下面这样的界面 就是说没有找到androi ...

  3. &lbrack;Android Pro&rsqb; Android学习——在线查看android源代码的3种方式

    原文:http://blog.csdn.net/chuekup/article/details/8067075 1. https://github.com/android 2. http://grep ...

  4. http&colon;&sol;&sol;www&period;blogjava&period;net&sol;xylz&sol;archive&sol;2013&sol;08&sol;05&sol;402405&period;html

    http://www.blogjava.net/xylz/archive/2013/08/05/402405.html

  5. http&colon;&sol;&sol;www&period;cnblogs&period;com&sol;flyoung2008&sol;archive&sol;2013&sol;08&sol;11&sol;3251148&period;html

    http://www.cnblogs.com/flyoung2008/archive/2013/08/11/3251148.html

  6. linux下的二进制文件的编辑和查看

    linux下的二进制文件的编辑和查看 http://blog.csdn.net/wangxiaoqin00007/article/details/6618003 一.在Linux下查看二进制文件的软件 ...

  7. 北京设计模式学习组bjdp&period;org第7次活动&lpar;2013&period;08&period;04&rpar;回顾会纪要

    时间:2013.08.04,9am-7pm 地点:北京龙泉寺(北京凤凰岭风景区内) 参加人数:北京龙泉寺信息中心(20人).北京设计模式学习组(9人) 活动要点: 1)寺院巡礼:义工师兄带领参观寺院. ...

  8. Linux学习总结(十四)—— 查看CPU信息

    文章首发于[博客园-陈树义],点击跳转到原文Linux学习总结(十四)-- 查看CPU信息. Linux学习总结(十四)-- 查看CPU信息 商用服务器CPU最常用的是 Intel Xeon 系列,该 ...

  9. Linux是cat、tail、head查看文件任意几行的数据

    Linux是cat.tail.head查看文件任意几行的数据 一.使用cat.tail.head组合 1.查看最后100行的数据 cat filename | tail -n 100 2.查看100到 ...

随机推荐

  1. Java之控制反转和依赖注入

    1.简介 依赖注入和控制反转,目的是为了使类与类之间解耦合,提高系统的可扩展性和可维护性,下面通过一个例子来引入这一概念. 2.案例 1)一般情况下的类耦合 Main.java public clas ...

  2. 20个C语言中常用宏定义总结

    01: 防止一个头文件被重复包含 #ifndef COMDEF_H#define COMDEF_H//头文件内容#endif 02: 重新定义一些类型防止由于各种平台和编译器的不同,而产生的类型字节数 ...

  3. Repeater分页

    void BindData()        {            PagedDataSource pds = new PagedDataSource();                     ...

  4. addChildViewController 与 addSubview

    在viewcontrollerA中, 如果想把controllerB.view添加进来, 可以用 addSubview, 但如果controllerB中有个事件, 使用到 self.navigatio ...

  5. Linux学习 -- 常用命令

    目录处理命令 ls mkdir rmdir pwd cd cp mv rm 文件处理命令 touch cat tac more less head tail 连接命令 ln 软连接 ln -s 类似于 ...

  6. Quick Cocos2dx CCLuaStack has no member names &&num;39&semi;loadChunksZip&&num;39&semi;

    demo进行了这么久,已经很久没有连真机调试一下了,昨天下午我旁边的家伙连真机调试出了很多问题,于是我也连真机调一下吧. 运行一下project.android里面的 build_native.bat ...

  7. VSCode的Markdown All in One插件,列表选项卡只有3个空格的解决方案

    Q: 在win10中,列表选项卡只有3个空格,非列表是正常的4个空格: A: 设置Markdown All in One的list.indentationSize: Thank You For yzh ...

  8. SpringAop注解实现日志的存储

    一.介绍 1.AOP的作用 在OOP中,正是这种分散在各处且与对象核心功能无关的代码(横切代码)的存在,使得模块复用难度增加.AOP则将封装好的对象剖开,找出其中对多个对象产生影响的公共行为,并将其封 ...

  9. 关闭open页面时刷新父页面列表

    var winObjEI = window.open("/Invoice/InvoiceViewEI?invoiceid=" + data.InvoiceId); ; //关闭op ...

  10. Linux之磁盘分区

    一.基础知识 1.磁盘分区 磁盘的分区主要分为基本分区(primary partion)和扩充分区(extension partion)两种,基本分区和扩充分区的数目之和不能大于四个.且基本分区可以马 ...