总结vim + ctags / cscope

本文总结了在Linux环境下,如何使用ctags和cscope作为代码浏览工具。ctags能快速定位函数或变量定义,而cscope更加强大,能够查找函数的调用位置。通过运行特定命令生成索引文件,然后在Vim中配合快捷键进行高效代码导航。cscope的查询模式包括:定义(g),调用(c),被调用(d),包含(i)和搜索(s)等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

总结下ctags和cscop的使用经验。

Linux下没有windows的source insight, 所以看代码不是很方便。


ctags:


曾经习惯了ctags, 也苦于它有限的功能。因为它只能定位的函数或变量的定义,所以要想查找某个函数调用的地方,只能用grep或egrep了。

简单的讲ctags常用的用法:

在你的源代码根目录下运行如下命令:  ctags -R *

它会在你的当前目录及其所有子目录下生成索引文件tags.

查看函数定义:  vim 打开文件;

                             光标指定到某函数名;

                             按 Ctrl + ]   跳转到函数定义

                             Ctrl + t 或者Ctrl + o可以返回跳转之前的页面。

这就差不多足够了。

要注意的一点是,最好就在运行 " ctags -R * "命令的目录下打开你想查看的代码文件,不要嫌打开子目录中文件麻烦。这样你能查看更多的函数/变量定义。如果你进入某个子目录A中打开源文件,那么定义在子目录B中的函数定义是跳转不过去的 ( tags文件不一样 )


cscope:

后来改用了cscope, 感觉比ctags更强大,因为它可以查到函数被调用的地方。

常用命令:

在你的源代码根目录下运行:

find ./ -name "*.h" -o  -name "*.c" -o  -name "*.cc"  > cscope.files           ( cscope也支持c++和java, 不过默认会跳过.cpp和.java后缀名文件。所以可用该命令把相关后缀名文件都放入cscope.files,问题就解决。)

然后运行 cscope -bkq -i cscope.files

仍然在该根目录下用vim打开你想查看的文件,哪怕是子目录内的文件。原因和使用ctags时要注意的问题相同。

R 对所有子目录里的文件也建立索引

b 不启动cscope自带的用户界面,仅建立符号数据库
q 加快cscope的索引速度 (生成cscope.in.out和cscope.po.out文件时)
 k 生成索引文件时不搜索/usr/include目录
 i  指定要浏览的文件

好了,现在大功告成。可以体验cscope的方便之处了:

比方说你要查看linux内核代码中cgroup_init()的调用处,可以在vim命令行中输入:
:cs find c cgroup_init           
就可以查找到所有调用该函数的地方


最后简单介绍下cscope查找命令find:

find :cscope查找命令

使用方法:  :cs find [ query_mode ] [ func_name or macro_name ]

 [ query_mode ]:  (仅列出我自己常用的)

                            g  —> 查询符号定义,类似ctags的功能

                            c  —> 查询调用这个函数的函数

                            d  —> 查询被之后func_name所调用的函数

                            f   —> 查寻该文件

                            i   —> 查寻#include该文件的文件

                            s  —> 查询后面的函数/宏名等等


具体的解释大家可以在网上搜搜,内容还是很多的。


IT人的微信自媒体--- 杰天空, 走在寻找创意的路上
发掘创意,点缀生活,品味人生。

请搜索微信订阅号: jksy_studio  ,或者微信扫描如下二维码添加关注





杰天空静候您的光临。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值