从cscope数据库生成调用树

时间:2010-02-01 17:23:58

标签: c refactoring code-analysis analysis cscope

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

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

此外,我希望能够从任何一点构建“被呼叫”和“从中调用”子树。

因此,工具必须具有交互性且易于修补。

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

sourceforge上有cbrowser程序,但其call-tree(callgraph)功能已被破坏。

5 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

我尝试“修复”cbrowser中的调用树问题(参见http://retprogbug.wordpress.com/2010/09/18/an-attempt-to-resuscitate-cbrowser-0-8/),虽然我是一个完整的编程菜单,但我不保证。

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

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

建议Ubuntu用户无法正常运行,请关注these instructions

答案 4 :(得分:1)

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

参见示例调用“graph”(我一直称它为“树”,呐喊)。 See example from the Linux kernel.

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

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