当前位置:  开发笔记 > 编程语言 > 正文

cscope或ctags为什么选择一个而不是另一个?

如何解决《cscope或ctags为什么选择一个而不是另一个?》经验,为你挑选了2个好方法。

我主要使用vim/gvim作为编辑器,并且正在考虑使用lxr(Linux交叉引用)和cscope或ctags的组合来探索内核源代码.但是,我没有使用cscope或ctags,并且想要听到为什么人们可以选择其中一个而不考虑我使用vim作为主编辑器.



1> richq..:

ctags启用了两个功能:允许您从函数调用跳转到其定义,以及omni完成.第一个意味着当您通过调用方法时,命中g]CTRL-]将跳转到定义或实现该方法的位置.第二个功能意味着当您键入foo.或者foo->foo是一个结构时,将显示一个带字段完成的弹出菜单.

cscope也有第一个功能 - 使用set cscopetag- 但不是最后一个.但是,cscope还增加了跳转到调用函数的任何地方的能力.

因此,就跳转代码库而言,ctags只会引导您前往实现函数的位置,而cscope也可以向您显示调用函数的位置.

你为什么选择一个而不是另一个?好吧,我用两者.ctags更容易设置,运行速度更快,如果你只关心单向跳跃,它会显示更少的线条.你可以跑:!ctags -R .,g]只是工作.它还可以实现全方位的完整.

Cscope非常适合更大,未知的代码库.设置很痛苦,因为cscope需要一个包含要解析的文件名列表的文件.同样在vim中,默认情况下没有设置键绑定 - 您需要:cscope blah blah手动运行.

为了解决第一个问题,我有一个cscope_gen.sh看起来像这样的bash脚本:

#!/bin/sh
find . -name '*.py' \
-o -name '*.java' \
-o -iname '*.[CH]' \
-o -name '*.cpp' \
-o -name '*.cc' \
-o -name '*.hpp'  \
> cscope.files

# -b: just build
# -q: create inverted index
cscope -b -q

这将搜索我感兴趣的代码,创建cscope.files列表并创建数据库.这样我就可以运行":!cscope_gen.sh",而不必记住所有设置步骤.

我使用这个片段将cscope搜索映射到ctrl-space x 2,这减轻了cscope的其他下行:

nmap  :cs find s =expand("")

有此cscope_maps.vim插件,设置了一堆类似的绑定.我永远不会记得所有选项的意思,所以往往坚持使用ctrl-space.

因此得出结论:ctags更容易设置,并且大多数工作没有做太多其他事情,它对于omni-complete也是至关重要的.如果您必须维护一个庞大且大部分未知的代码库,但需要更多的腿部工作,cscope提供了更多功能.


设置`cscopetag`(`cst`)使`:tag`和`CTRL-]`命令首先通过cscope搜索,然后标记
有没有办法让ctags更准确?我在内核根目录中做了'make tags`并且一直在玩跳跃,大部分时间都在错误的地方.我读到ctags有c预处理器的问题,但考虑到在lxr中使用了ctags,显然必须要做一些事情.
如果存在深度宏伏都教,那么ctags可能会失败:-(我主要用于C++的东西,它更少依赖于那方面(虽然它有自己的问题......)

2> LB40..:

几个月前我处于同样的境地......

缺乏ctags的精确度是一个痛苦...,我发现cscope更好的所有宏相关的东西(并在Linux内核中有一堆宏)..

关于用法,这实际上是直截了当的...你只需在你内核的根目录输入cscope -R然后就没什么可担心的了.(我的意思是如果你只是想探索那个完美......)

然后,键绑定都基于Ctrl- \(如果你对Ctrl过敏你可以重新映射),你主要使用s和g ....

为内核开发,我不需要那么多完成....

无论如何,去cscope,这样更方便,准确.


<<你只需在内核的根目录下键入cscope -R ....最好在内核下键入"make cscope",否则最终会得到Linux内核中存在的所有体系结构,因此会对同一个C符号进行多重定义.
推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有