如何在vi / vim中找到C代码中函数的调用者和被调用者?

时间:2013-10-19 18:52:48

标签: c linux vim vi

我想知道如何在函数名称上轻松点击(或者使用一些简单的快捷方式)并查找其所有被调用者或打开已定义的位置。网络上的大多数网络手册都很难遵循或者没有发生。假设我想点击allocuvm并查看其定义位置?

uint newstk=allocuvm(pgdir, USERTOP-PGSIZE, USERTOP); 

3 个答案:

答案 0 :(得分:15)

cscope最小示例

Ingo提到它,这是一个例子。

转到项目的基本目录并运行:

cscope -Rb

这将生成一个cscope.out文件,其中包含已解析的信息。生成速度相当快,即使对于像Linux内核这样的大型项目也是如此。

打开vim并运行:

:cs add cscope.out
:cs find c my_func

ccallers的助记符。其他cscope提供的查询也是可能的,助记符列在:

help cscope

这会将一个调用者列表添加到quickfix列表中,您可以使用以下命令打开该列表:

:copen

转到您感兴趣的行并按Enter键跳转到那里。

要查找光标下当前功能名称的来电者,请添加到.vimrc

function! Csc()
  cscope find c <cword>
  copen
endfunction
command! Csc call Csc()

并在光标位于函数顶部时输入:Csc<enter>

TODO:

建议:我喜欢vim,但设置这种东西对我来说太复杂了。如果项目对您来说足够重要,请尝试让项目在某些&#34; IDE&#34;上运行。如果项目没有跟踪IDE配置文件(这是自动更改污染回购的blob ......),它可能会涉及一些开销,但这对我来说是值得的。对于C / C ++,我最喜欢的是KDevelop 4。

答案 1 :(得分:10)

为此,Vim与 cscope 工具集成;有关详细信息,请参阅:help cscope

答案 2 :(得分:0)

vi /。 --- /是vi中的搜索功能,和。将重复相同的命令。

如果它是一个大文件,你也可以使用sed(流编辑器) SED grep可以为您提供行号

阅读手册页