Emacs中是否有函数调用层次结构功能?

8

我正在维护别人的代码。该代码使用GCC 4.4.3在Linux平台上用C语言编写。然而,这段代码跳来跳去,很难找出所有函数被调用的地方。

在Visual Studio中,有一个名为“调用层次结构”的功能,可以显示函数从哪里调用和被调用。Emacs(23.1.1)是否有类似的功能?

2个回答

7

经典的Emacs跳转调用方式是使用TAGS文件,并使用M-.命令。我建议在项目的根目录中使用以下命令使用Exuberant C Tags

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

然后使用visit-tags-table,您就可以打开TAGS文件。使用M-.可以跳转到每个定义或调用关键字的位置。使用C-uM-.跳转到另一个出现位置。使用C-xzzz等来重复查找。
如果您有很多项目,可以为每个项目创建一个TAGS文件,然后调用visit-tags-file将TAGS文件添加到要搜索的TAGS文件列表中。
另一种经典的方法(unix方式)是使用命令M-xfind-grep来搜索关键字的出现位置。

谢谢,我刚刚在一个小项目上尝试了一下。效果很好。但是,我不确定您创建标签文件的命令ctags -e --c-kinds=pxd -R。我可以理解-e-用于emacs的标签。--c- c语言。-R递归,因此在创建标签文件时遍历所有文件和目录。但是,kinds=pxd是什么?不太确定。非常感谢。 - ant2009
@Jermoe。我想知道你是如何更新TAGS文件的。我刚添加了一些新函数,但是当我尝试导航到它们时,它显示“没有包含...的标签”。我发现我必须删除我的TAGS文件,然后生成一个新的。这样做正确吗?谢谢。 - ant2009
执行 ctags --list-kinds=c 命令可以知道你可以使用 --c-kinds 添加或删除 TAGS 文件中的哪些 C 元素。 - Jérôme Radix


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接