13

我想从 Linux 中的 c 和 c++ 项目的 cscope 数据库生成完整和部分调用树。

该项目相当大,因此使用项目的完整调用树可能并不容易,因此我想使用类似 grep 的函数名称过滤器来限制调用树的生成。

而且我还希望能够从任何点构建“被调用”和“被调用”子树。

所以工具必须是交互式的并且易于修补。

PS:我想使用 cscope 数据库,因为它已经在项目中使用并且生成它的速度相当快。我使用 vim 编辑器并拥有 X windows 系统。

sourceforge 上有 cbrowser 程序,但它的调用树(调用图)功能已损坏。

4

5 回答 5

4

如果你想用 vim 来做,这里有一种方法:

http://www.vim.org/scripts/script.php?script_id=2368

于 2010-07-30T16:57:16.550 回答
2

我已经尝试在 cbrowser 中“修复”调用树问题(请参阅http://retprogbug.wordpress.com/2010/09/18/an-attempt-to-resuscitate-cbrowser-0-8/)作为一个完整的编程菜鸟,我不做任何保证。

于 2010-09-19T14:58:00.753 回答
1

除了 cscope 之外,我不知道有任何程序可以读取 cscope 数据库。甚至 vim 的 cstag 功能也只是启动它查询的后台 cscope 进程。

至于调用图的生成,如果你不介意走出 cscope,我更喜欢 doxygen 创造的东西。它们可能有点大,但它也可以从几乎所有点生成图形,并且直接在其中浏览源代码非常容易。

于 2010-02-13T09:25:49.370 回答
1

kscope可能是另一种选择。我不确定它是否会做所有指定的事情,但它对于 GUI 应用程序来说是相当通用的。

建议无法运行的 Ubuntu 用户遵循这些说明

于 2011-01-15T00:00:50.717 回答
1

我让这个基于 cscope 的 Bash 脚本在 Cygwin 和 Windows 中工作:http: //toolchainguru.blogspot.com/2011/03/c-calltrees-in-bash-revisited.html

请参阅示例调用“graph”(我一直称它为调用“tree”,哎呀)。请参阅 Linux 内核中的示例。

它需要 cscope(当然)和 graphviz。它能够制作上游和下游图,以及组合上下图(参见示例)。

我还没有在这里演示它,但是这种方法在大型项目中非常有效,其中可能在多个目录中定义了相同的功能。只会为相同的函数名称绘制一个节点(因此,即使您在目录结构中定义了多个 main(),也会有一个“主”节点)——并且您将有多个边从这样的节点发出,带有文件/行指示器。我发现这方面比 GNU cflow 更有用,它坚持只选择一个目录来查看。(Jason Nyberg Bash 脚本不能很好地处理线程,GNU cflow 处理得很好;要记住的一点.)

于 2013-05-13T13:53:49.510 回答