tags代码浏览工具

tags工具介绍

一般来说,如果我们想要研究一个c/c++项目的源码,我们首先要做的是为该项目生成tags文件,tags文件种类有很多,比如 ctags、etags、cscope、gtags 等,有关他们的区别可以参考下面链接里的内容:

https://github.com/oracle/opengrok/wiki/Comparison-with-Similar-Tools

ctags使用

ctags官网

提供下载,安装、手册、FAQ等信息

http://ctags.sourceforge.net/

ctags功能

ctags的功能:扫描指定的源文件,找出其中所包含的语法元素,并将找到的相关内容记录下来。

ctags常用命令

ctags的功能:扫描指定的源文件,找出其中所包含的语法元素,并将找到的相关内容记录下来。

cscope使用

cscope官网

提供下载,安装、手册、FAQ等信息

http://cscope.sourceforge.net/

cscope功能

cscope是用来浏览源码的工具,可生成符号数据库,以方便快速的搜索和索引。相对ctags提供了更多功能,查找符号调用位置,正则表达式搜索等。

cscope常用命令

cscope -Rbk:迭代遍历子目录生成数据库,但不打开GUI。

gtags使用

gtags官网

http://www.gnu.org/software/global/

gtags功能

它与ctags或etags相似,为源码生成符号索引,并且提供了更多强大的功能,如符号调用位置,正则表达式搜索,符号补全搜索等。

gtas使用

GTAGS    definition database
GRTAGS   reference database
GPATH    path name database$ global //生成符号$ global symbal //搜索符号文件路径$ global -c prefix  //补全符号

生成kernel标签

Linux内核不仅包含了x86架构的函数还包含了如:arm、powerPC等等其他架构的函数,如果直接生成tags文件,将来查找时,多种架构的同名函数会混淆在一起,很不方便。贴心的Linux内核组给准备了tags.sh文件,可以自动生成相应的tags(ctags用),和cscope.out(cscope用)。linux的Makefile里已经帮我们写好了如何生成各种tags,

$ make help# 省略其他tags/TAGS    - Generate tags file for editorscscope    - Generate cscope indexgtags           - Generate GNU GLOBAL index

由上可以看到,我们只要执行对应的make命令,就可以生成各种tags文件了,make调用Makefile,然后把参数传递给**/script/tags.sh,**tags.sh会接收更多的参数ARCH, SUBARCH, SRCARCH, srctree, src。

  1. ARCH: which architecture to index. You can see all architectures list just by doing ls -l arch/ in your kernel source tree.
  2. SUBARCH: the meaning of this variable depends on your architecture:
    • if ARCH=arm, SUBARCH will be used to determine arch/arm/mach-* and arch/arm/plat-* directories, and these directories will be indexed
    • if ARCH=um, use SUBARCH to specify which architecture you actually want to use in your User-Mode Linux (like SUBARCH=arm or SUBARCH=x86)
    • for the rest of architectures, you can omit this variable
  3. ALLSOURCE_ARCHS: use this to index more than one architecture. Like ALLSOURCE_ARCHS="x86 mips arm" or ALLSOURCE_ARCHS="all". If you only want to index one architecture, omit this variable and use ARCH instead.
  4. COMPILED_SOURCE: set this variable to 1 if you want to index only actually compiled source files. If you want to index all source files, omit setting this variable.
  5. O= (this is actually Makefile parameter): use absolute paths (useful if you want to load created cscope/ctags index files outside of kernel directory, e.g. for development of out-of-tree kernel modules). If you want to use relative paths (i.e. you’re gonna do development only in kernel dir), just omit that parameter.

例如:

内核生成特定架构cscope数据库
make cscope ARCH=x86
make cscope ALLSOURCE_ARCHS=“x86 arm” 生成多种架构

生成特定架构内核cscope数据库相关推荐

  1. 【数据库内核】数据库核心技术演进之路

    目录 概述 数据库的演进之路 数据库的发展-业务视角 数据库的技术演进之路 一.传统集中式数据库架构 1. 查询分析处理过程 2. 核心技术 二.分布式数据库架构 1. 数据分布 2. 分布式事务 3 ...

  2. 自动生成硬件优化内核:陈天奇等人发布深度学习编译器TVM

    有了 TVM,业界与学界开发者们可以快速.轻松地在各个系统(包括手机.嵌入式设备与低功耗芯片)上部署深度学习应用程序,同时无须担心资源与速度的限制.「TVM 作为神经网络和硬件后端之间的共同层,消除了 ...

  3. Nat. Mach. Intell. | 利用条件循环神经网络生成特定性质分子

    作者 | 陆丰庆 今天给大家介绍瑞士知名药企阿斯利康和伯尔尼大学的 Esben Jannik Bjerrum团队在Nature Machine Intelligence上的一篇论文.该研究提出基于分子 ...

  4. 陈睿:架构设计之数据库拆分六大原则

    架构设计之数据库拆分原则 数据拆分前其实是要首先做准备工作的,然后才是开始数据拆分,我先讲拆分前需要做的事情: 第一步:采用分布式缓存redis.memcached等降低对数据库的读操作. 第二步:如 ...

  5. 架构 | 新一代分布式数据库架构详解

    分布式数据库技术发展多年,但是在应用.业务的驱动下,分布式数据库的架构一直在不断发展和演进.开源金融级分布式数据库SequoiaDB,经过6年的研发,坚持从零开始打造数据库核心引擎.在技术探索中,选择 ...

  6. JHipster生成单体架构的应用示例

    本文演示如何用JHipster生成一个单体架构风格的应用. 环境需求:安装好JHipster开发环境的CentOS 7.4(参考这里) 应用名:app1 实体名:role 主机IP:192.168.2 ...

  7. 云化架构下,数据库架构的演进

    如今,大型企业如金融企业和银行等,在下一代的微服务架构转型要求下,需要基础软件和数据平台能够实现原生的云化,以满足微服务架构的需求. 微服务,是一种面向服务的,有特定边界的松散耦合的架构. 主要特点包 ...

  8. 如何在Java中生成特定范围内的随机整数?

    如何生成特定范围内的随机int数值? 我已经尝试了以下方法,但是这些方法不起作用: 尝试1: randomNum = minimum + (int)(Math.random() * maximum); ...

  9. C/C++ 中生成特定范围内的随机数

    大家在写 C/C++ 程序时,难免会遇到要求获取某个范围内的随机数,我查阅了一些资料后,总结如下.本文分两部分,先介绍 C 语言中与随机数相关的两个函数 srand 和 rand,后介绍 C++ 中的 ...

最新文章

  1. keystone连接mysql_3、KeyStone服务部署与验证
  2. PL/SQL 包的概念及创建使用
  3. mysql 查询系统_使用select和show命令查看mysql数据库系统信息
  4. webpack对脚本和样式的处理
  5. gets函数用不了_函数篇:指数函数
  6. indesign教程,如何改变内容的顺序?
  7. Program E的Flash前端
  8. MATLAB线型英文名字
  9. 川轻化c语言实验答案,C语言实验目().doc
  10. OOM Killer机制
  11. 到底什么是IaaS、PaaS、SaaS?
  12. 一键脚本搭建docker redis 集群(cluster)
  13. jquery如何根据id获取标签内的值,以及如何通过id赋值
  14. 迷时师度 悟了自度--侯捷
  15. 2021年职业技能鉴定职业资格维修电工证(高级)考试题库
  16. python入门day11闭包装饰器
  17. Pytorch实战第一步--用经典神经网络实现猫狗大战
  18. Vue中使用Echarts构建3D地球层+模拟时钟
  19. WIN10在文件夹对着文件点击右键无反应!鼠标一直在转圈圈然后会文件夹处会显示未响应!
  20. server2019远程服务器ipv4地址_windows服务器下指定IP地址远程访问服务器的设置方法...

热门文章

  1. 游戏中的数学之魔塔数学
  2. cocos2d-iphone之魔塔20层第五部分
  3. 万字长文解读深度学习算法在自动驾驶规控中的应用
  4. 精通正则表达式学习记录 第一章 正则表达式入门
  5. java-根据url生成二维码
  6. cp1025 linux驱动下载,HP LaserJet 专业 CP1025 彩色打印机驱动下载
  7. 漫画,开学季来临,用Python告诉你,女朋友应该从全国的哪个城市找
  8. babel 学习笔记
  9. Apache 配置访问日志
  10. 一步一步实现一个完整的围棋游戏