在阅读大型C程序或库时,在许多源文件和目录中遍历嵌套函数的好方法是什么?
通常,在一个C源文件中声明的函数将直接重定向到在另一个C文件中声明的另一个函数,后者实际上可能会再次重定向。
目前,我只是grep在链中的下一个函数中查找其声明,但是必须有一种更有效的方法。
注意:我明确不是在询问如何在运行时或调试器中跟踪程序流。我只是问有关阅读资料的问题。
最佳答案
使用cscope
Cscope是开发人员用于浏览源代码的工具。它具有无可挑剔的Unix血统,最初是在PDP-11时代由贝尔实验室开发的。 Cscope多年来一直是AT&T Unix官方发行版的一部分,并已用于管理涉及2000万行代码的项目!
这是该工具的简短介绍:cscope tutorial
cscope可以为您做的几件事是:
查找功能定义
搜索一个C符号
查找调用任何函数的函数
查找egrep模式
在源代码中查找并替换字符串
如果需要,您可以将其与vim或emacs编辑器一起使用。这进一步提高了生产率。一起使用时,您可以直接在代码内使用任何cscope功能。一个例子是跳转到函数的定义。它会做的远远超出您的要求。
如何在Vim中使用Cscope
这很简单,只需几个命令即可。
首先创建cscope数据库。这需要花费一些时间,具体取决于源代码树中的文件数。在随后的启动中,它将快速启动。$cscope -R -b
现在,您可以通过以cscope -d
启动cscope的交互式窗口来直接搜索任何内容,也可以从vim编辑器本身进行搜索。
假设您在文件main.c中,并且还有另一个文件functions.c。主要是在调用函数func()来定义要搜索的函数。在main.c中键入以下命令:cs find g func
无论您在源代码树中的哪个文件中,这都将直接带您到函数的定义。
如果您厌倦了打字,也可以配置键盘快捷键
我将链接附加到vim cscope教程,您可以在此找到更多信息:
cscope vim basics
cscope with vim tutorial
要执行更多操作,可以将ctags与其他两个一起使用。 Vim + cscope + ctags非常强大。
参考man page了解更多信息
关于c - 如何有效地跟踪C中的嵌套函数调用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33093434/