我知道source insight可以在一个窗口中显示多层函数关系.
例如,我们有四个功能如下
void example_A()
{
example_B();
}
void example_B()
{
example_C();
}
void example_C()
{
example_D();
}
void example_D();
{
return 5;
}
Run Code Online (Sandbox Code Playgroud)
当我点击example_D()源洞察时,源洞察秀example_C()会调用该函数.
而且,当我点击时example_C(),我看到example_B()正在调用该函数.
这种关系是这样的:
Example_D()
|
-->Example_C()
|
-->Example_B()
|
-->Example_A()
Run Code Online (Sandbox Code Playgroud)
我可以在vim中使用cscope在一个窗口中看到这种关系吗?
谢谢.
有一些文件夹包含空格,因此,无法使用cscope索引这些文件夹.
我可以请你帮忙解决这个问题或任何建议.
谢谢朱利叶斯
感谢您的回复.
我使用cscope的步骤如下
当我尝试使用带有cscope的vim时我遇到了这个问题.我需要将此问题移到其他标签上.
我已经使用CEDET 1.0和ECB 2.40设置了emacs 23.1.50.1(受到Alex Otts设置的极大启发,位于http://github.com/alexott/emacs-configs/blob/master/rc/emacs-rc-cedet.el和他对Cedet的热情介绍(http://alexott.net/en/writings/emacs-devenv/EmacsCedet.html),谢谢Alex).它工作得很好,但我需要更多地了解在处理多个项目时如何处理代码完成和符号引用.
我创建了一个简单的ede项目,如下所示:
(ede-cpp-root-project "test"
:file "~/src/sw/anchor"
:include-path '("/Common")
:system-include-path '("~/include"))
Run Code Online (Sandbox Code Playgroud)
加载此项目时,Semantic是否仅在项目配置中指定的各个目录中查找完成?
我按照http://mmmyddd.freeshell.net/blog/Computer/Emacs/usecscopesemanticdbbackend使用cscope作为semanticdb的后端.我可以在没有emacs抛出任何错误的情况下运行semanticdb-enable-cscope-in-buffer,但我不知道语义是否使用了我的数据库.我是否可以在项目定义中添加对cscope.out的引用,以便更好地控制在当前上下文中搜索引用的文件?
有几个古怪的东西:
当我尝试打开一个新的源文件时,我收到错误"apply:Searching for program:no such file or directory,global",没有任何反应.如果我再试一次,一切都很好.
当我尝试通过指向锚文件加载项目时,我收到此错误:"if:Wrong type argument:class-p,ede-cpp-root"
我想将输出从cscope重定向到Vim quickfix窗口.胶水部分很容易,但我目前陷入错误格式.以下是cscope输出的示例(cscope -L -1 bar):
Format: "filename scope linenumber sourceline"
Example: "abc.cpp foo 25 bar()"
Run Code Online (Sandbox Code Playgroud)
这意味着在foo()中,在abc.cpp的第25行,调用bar().
efm = %f\ %*[^\ ]\ %l\ %m但工作但范围信息丢失.例如:
Input: "abc.cpp foo 25 bar()" becomes
Output: "abc.cpp |25| bar()"
Run Code Online (Sandbox Code Playgroud)
我想要的是在quickfix窗口中包含范围,如下所示:
Input: "abc.cpp foo 25 bar()" becomes
Output: "abc.cpp |25| bar() inside foo()"
Run Code Online (Sandbox Code Playgroud)
是否可以仅使用errorformat执行此操作,或者是否需要编写脚本来操作输出,然后再将其输送到Vim?
是否有人知道如何使用ctags和cscope生成调用层次结构图?我需要在终端中运行命令并将输出重定向到文件,而不是在vim中执行.
我正在开发一个需要理解llvm编译器源代码的项目.要浏览llvm的源代码,我尝试在源的根目录中使用带有以下命令的cscope:
cscope -R*
但它不起作用.因为主要有.cpp和.h文件,但也有一些.c文件.那么现在我不知道如何让cscope工作?有人可以帮忙吗?
当我使用搜索C符号或全局定义时cscope,它显示文件名和行号.我想看到完整的文件路径,以便我可以跳转到我的arch特定文件.例如,当在Linux代码库__switch_to上搜索on cscopebuild的全局定义时,我得到:
Global definition: __switch_to
File Line
0 process.c 297 struct task_struct *__switch_to(struct task_struct *prev,
1 switch_to.h 44 #define __switch_to(prev,next,last) do { \
2 process.c 202 struct task_struct *__switch_to(struct task_struct *old,
3 process.c 400 struct task_struct *__switch_to(struct task_struct *prev,
4 process_32.c 211 __switch_to(struct task_struct *prev, struct task_struct *next)
5 process.c 80 void *__switch_to(struct task_struct *from, struct task_struct *to)
6 process_32.c 248 __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
7 process_64.c 272 __switch_to(struct task_struct *prev_p, struct task_struct …Run Code Online (Sandbox Code Playgroud) 我在网上找到的所有cscope教程都谈到了如何使用cscope的交互模式来搜索vim和emacs等编辑器中的符号.但我认为应该可以在终端发出命令来做类似的事情
cscope -d -some_options <my symbol>
Run Code Online (Sandbox Code Playgroud)
我应该能够在stdout中看到结果列表,而不必进入ncurse UI并在那里做所有事情.我认为这是可能的,因为"唯一"的前端cbrowser可以在其TclTK UI中执行类似的操作.但不幸的是,代码远远超出了我.
但是,我没有找到有关此功能的文档.
我是在做梦,还是有无证件的做法?
谢谢!
UPDATE
一些进展:如果我使用sub-dir结构制作一个包含少量文件的小项目.然后rici的答案开箱即用.使用更大的项目(数千个具有复杂文件夹结构的文件).即使cscope.out和cscope.files存在于项目文件夹的根目录(也是我当前的工作目录),我从同一个命令和相同的符号中得不到任何东西.我怀疑该命令存在可伸缩性问题.我也试过命令
cat cscope.files | xargs cscope -d -L1 <symbol> -i
Run Code Online (Sandbox Code Playgroud)
无济于事.
UPDATE
非常离奇!我试着用其他一些符号.原来,我正在搜索的特定符号无法使用命令行显示.但我试过的所有其他符号都有效.并且cbrowser找到"失败"符号没有问题.无论如何,我只是运气不好.我将在命令行中单独询问有关此异常的问题.
我认为里奇的答案是正确的.
我有一个包含多个文件的源目录.其中一些是其他文件的符号链接.
我创建了一个cscope.files文件.但是当我执行cscope时.它抱怨符号链接的文件:
cscope: cannot find file /home/bla/source/file.cc
Run Code Online (Sandbox Code Playgroud)
我认为这不是很好,但也许正确的方法是更改"查找"脚本,只是编写符号链接的目的地?