从cscope数据库生成调用树

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

项目相当大,因此使用项目的完整调用树并不容易,所以我想用函数名的grep-likefilter来限制调用树的生成。

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

因此,工具必须是交互式的,并且易于修补。

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

sourceforge上有cbrowser程序,但它的call-tree(callgraph)function被破坏了。

如果你想使用vim这样做是一种方式:

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

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

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

建议Ubuntu用户无法运行它们,请遵循这些说明 。

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

参见示例调用“graph”(我一直称它为“树”,呐喊)。 请参阅Linux内核中的示例。

它需要cscope(当然)和graphviz。 它能够执行上游和下游图形,以及组合的向上和向下图形(参见示例)。

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

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

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