2010-09-06 61 views
7

我正在维护别人的代码。代码是在Linux平台上使用GCC 4.4.3编写的。但是,代码跳转很多,很难找出所有函数从哪里调用。Emacs中是否有函数调用层次结构

在Visual Studio中,有一个称为“调用层次结构”的功能,它将显示调用和调用函数的位置。 Emacs(23.1.1)有这样的功能吗?

回答

6

经典Emacs的方式跳转到呼叫是使用TAGS文件,并使用M-。命令。我建议使用Exuberant C Tags与项目中的根目录下面的命令:

ctags -e --c-kinds=+pxd -R . 

然后使用visit-tags-table就可以打开标签文件。用M-。您可以跳转到每个定义或致电您的关键字。使用C-uM-。跳转到另一个事件。使用C-xzzz ...重复搜索。

如果您有很多项目,可以为每个项目创建一个TAGS文件,然后调用visit-tags-file将TAGS文件添加到要搜索的TAGS文件列表中。

另一种经典的方式(un * x方式)是使用命令M-xfind-grep来搜索关键字的出现次数。

+0

谢谢,我刚刚尝试过一个小样本项目。工作得很好。但是,我不确定您的命令是否创建标签文件。 ctags -e --c-kinds = pxd -R。我可以理解emacs的-e - 标签。 - c - c语言。 -R递归,以便在创建标签文件时浏览所有文件和目录。但是,什么是-kinds = pxd?不确定。非常感谢。 – ant2009 2010-09-06 16:15:18

+0

@Jermoe。只是想知道你如何更新标签文件。我刚刚添加了一些新功能。但是,我无法导航到它们,因为它表示“没有包含...的标签”。我发现我必须删除我的TAGS文件,然后生成一个新的。它是否正确?谢谢。 – ant2009 2010-09-06 16:32:24

+0

做一个ctags --list-kinds = c来知道你可以使用--c-kinds从TAGS文件中添加或删除哪些类型的C元素。 – 2010-09-06 18:11:44