总结下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 对所有子目录里的文件也建立索引
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 ,或者微信扫描如下二维码添加关注
杰天空静候您的光临。