我想从Linux的c和c ++项目的cscope数据库生成完整和部分调用树。
项目相当大,因此使用项目的完整调用树并不容易,所以我想用函数名的grep-like过滤器来限制调用树的生成。
此外,我希望能够从任何一点构建“被呼叫”和“从中调用”子树。
因此,工具必须具有交互性且易于修补。
PS: 我想使用cscope数据库,因为它已经在项目中使用并且生成它相当快。我使用vim编辑器并拥有X windows系统。
sourceforge上有cbrowser程序,但其call-tree(callgraph)功能已被破坏。
答案 0 :(得分:3)
如果你想在这里使用vim这样做是一种方式:
答案 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处理得很好;需要注意的事项。)