如何在C中有效跟踪嵌套函数调用?

时间:2015-10-13 03:05:30

标签: c

在读取大型C程序或库时,跨多个源文件和目录遍历嵌套函数的好方法是什么?

通常,在一个C源文件中声明的函数将简单地重定向到另一个C文件中声明的另一个函数,该文件实际上可能会再次重定向。

目前,我只是为链中的下一个函数找到它的声明,但必须有一个更有效的方法。

注意:我明确没有询问如何在运行时或调试器中跟踪程序流。我只是要求阅读来源。

2 个答案:

答案 0 :(得分:5)

使用cscope

  

Cscope是开发人员浏览源代码的工具。它拥有无可挑剔的Unix血统,最初是在PDP-11时代贝尔实验室开发的。 Cscope多年来一直是官方AT& T Unix发行版的一部分,并已用于管理涉及2000万行代码的项目!

这是该工具的简短介绍:cscope tutorial

cscope可以为您做的一些事情是:

  1. 查找功能定义
  2. 搜索C符号
  3. 查找调用任何函数的函数
  4. 查找egrep模式
  5. 在源代码中查找并替换字符串
  6. 如果需要,您可以将其与vim或emacs编辑器一起使用。这进一步提高了生产力。一起使用时,您可以直接在代码中使用任何cscope功能。一个例子是跳转到函数的定义。它会比你需要的更多。 如何将Cscope与Vim一起使用

    这很简单,只需要很少的命令。

    1. 首先创建cscope数据库。这需要一些时间,具体取决于源树中的文件数量。在随后的发布中,它将很快启动。

      $cscope -R -b 现在,您可以直接从cscope的交互式窗口中搜索任何内容,方法是将其作为cscope -d启动,或者从vim编辑器本身进行搜索。

    2. 假设您在文件main.c中,并且您有另一个文件functions.c。在main中,您调用了一个函数func(),它是您要搜索的定义。在main.c中键入以下命令

      :cs find g func 这将直接引导您在源树中的任何文件中定义函数。

    3. 如果您厌倦了键入

    4. ,也可以配置键盘快捷键

      我附上了vim cscope教程的链接,你可以在这里找到更多信息:

      cscope vim basics

      cscope with vim tutorial

      要做得更多,您可以使用ctags和其他两个。 Vim + cscope + ctags非常强大。

      请参阅man page了解详情

答案 1 :(得分:0)

虽然不仅限于该功能,doxygenGraphviz一起,可以在其生成的HTML文档中绘制交互式call graphs and caller graphs