我想知道如何轻松单击(或使用一些简单的快捷方式)函数名称并找到它的所有被调用者或打开它的定义位置。网络中的大多数网络手册真的很难理解或不会碰巧解决。假设我想点击 allocuvm
并查看它的定义位置?
uint newstk=allocuvm(pgdir, USERTOP-PGSIZE, USERTOP);
最佳答案
cscope 最小示例
Ingo 提到过,这里有一个例子。
首先你应该设置你的.vimrc
:
set cscopequickfix=s-,c-,d-,i-,t-,e-
然后到你的项目的基目录并运行:
cscope -Rb
这会生成一个 cscope.out
包含解析信息的文件。生成速度相当快,即使对于像 Linux 内核这样的大型项目也是如此。
打开vim并运行:
:cs add cscope.out
:cs find c my_func
c
是 callers
的助记符.其他cscope
提供的查询也是可能的,助记符列在:
help cscope
这会将调用者列表添加到 quickfix 列表,您可以使用以下方式打开:
:copen
转到您感兴趣的行,然后按回车键跳转到那里。
要查找当前光标下函数名称的调用者,请添加到您的 .vimrc
:
function! Csc()
cscope find c <cword>
copen
endfunction
command! Csc call Csc()
然后输入:Csc<enter>
当光标位于函数顶部时。
待办事项:
- 用一个命令为光标下的当前函数做这件事。相关:Show function name in status line
- 输入文件时自动添加最近的数据库(父目录):how to auto load cscope.out in vim
- 像 Eclipse 一样以交互方式打开调用图。相关:Generate Call-Tree from cscope database
忠告:我喜欢 vim,但设置这种东西对我来说太复杂了。而且它没有考虑类,例如在 C++ 中。如果一个项目对您来说足够重要,请尝试让该项目在某些“IDE”上运行。如果项目不跟踪 IDE 配置文件(它们是会污染存储库的自动更改的 blob...),它可能会涉及一些开销,但这对我来说是值得的。对于 C/C++,到目前为止我最喜欢的是 KDevelop 4。
关于c - 如何在 vi/vim 中查找 C 代码中函数的调用者和被调用者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19469770/