标签: call-graph

从命令行为java项目创建可视调用图

我想从命令行为java项目创建一个调用图.我已经探索了几个项目,每次都达不到我想要的目标(无论是我的理解还是功能).关于如何做到这一点的一些简单指南将是很好的,另一个目标是获得该图的文本表示.

这是我尝试过的:

呼叫图:https://github.com/gousiosg/java-callgraph

这给了我想要的文本输出,但我找不到一种方法(在查看文档一段时间后),将其转换为可视(图像文件)图形输出.

烟灰:http://sable.github.io/soot/

花了很多时间查看SOOT文档,这似乎很难遵循,我设法让SOOT创建字节码.但是,我找不到有关如何从中创建调用图的任何指南.我只在主页上看到它可以执行此操作,我从谷歌搜索中获得了几个电子邮件对话,所有这些只是没有答案的问题.我正在使用命令的每晚构建:

java -cp soot-trunk.jar soot.Main -cp . -pp HelloWorld
Run Code Online (Sandbox Code Playgroud)

HelloWorld是我的java文件的名称,我得到一个.class文件的输出,但我看不到如何获得实际的调用图.这是在遵循指南之后:https://github.com/Sable/soot/wiki/Running-Soot.当我关注关于可视化的链接时,它们似乎是断开的链接,然后重定向回主页.我可以在命令行页面上看到有关使用-cg标志的一些信息,但无法使任何工作 - 我只是得到一个选项解析错误,建议一个无效的参数:https://ssebuild.cased.de/nightly /soot/doc/soot_options.htm#phase_5

搜索stackoverflow - 现有答案 我已经看过几个类似的问题,例如:Java调用图的静态分析 然而,答案只是说"使用soot",或"使用call-graph",我一直在尝试这些没有任何运气 - 虽然我最接近调用图,因为我有文本输出.

我看到一些基于GUI的软件和eclipse插件声称可以创建调用图,但我试图从命令行开始工作.

任何帮助真的很感激,一个指南,或一组命令与调用图或Soot,或其他程序真的会有所帮助.可能值得为他们的文档提交任何简短的教程,因为似乎有更多的问题而不是搜索时的答案.

作为参考,我目前正在尝试使用下面一个非常简单的类:

public class HelloWorld {

    public static void main(String[] args) {
        foo();
    }
    public static void foo(){
        System.out.println("Hello World");
    }
}
Run Code Online (Sandbox Code Playgroud)

java call-graph static-code-analysis

19
推荐指数
1
解决办法
3489
查看次数

在调用函数时使GDB打印控制流程

如何调用感兴趣的gdb打印函数,根据堆栈的深度缩进?

我希望能够说出(制作):

(gdb) trace Foo* Bar* printf
Run Code Online (Sandbox Code Playgroud)

并让gdb打印所有以Foo或Bar开头的函数,因为它们被调用.有点像gnu cflow,除了使用调试符号和仅实际调用的打印函数,而不是所有可能的调用流.

无法帮助的工具包括cachegrind,callgrind和oprofile,它们最常调用函数的结果.我需要保留的调用顺序.

通配符(或等效的)是必不可少的,因为有很多Foo和Bar函数.虽然我愿意完全记录所有功能.或者,也许告诉gdb记录特定库中的所有函数.

某些GDB向导必须有一个用于此常见作业的脚本!

c debugging gdb dynamic call-graph

17
推荐指数
3
解决办法
2万
查看次数

在golang中创建调用图

我正在寻找为golang项目生成调用图的可能性.类似于Doxygen的 C++类图功能(使用选项CALL_GRAPH = YES).

到目前为止我找到了

http://saml.rilspace.org/profiling-and-creating-call-graphs-for-go-programs-with-go-tool-pprof

http://blog.golang.org/profiling-go-programs

这会在程序运行时每秒100次对程序的调用堆栈进行采样,并创建一个对分析有用的图形.如果你的程序大部分时间都花在与你无关的函数上,我发现这个解决方案并不是很有用.

然后是这样的:

https://godoc.org/golang.org/x/tools/go/callgraph/static

从它的描述听起来像我需要的,但似乎没有文档,我不明白如何使用它.

我也找到了

https://github.com/davecheney/graphpkg/blob/master/README.md

https://github.com/paetzke/go-dep-graph/blob/master/README.org

但他们只创建依赖图.

go call-graph

17
推荐指数
2
解决办法
1万
查看次数

如何在GDB中自动打印下N行?

我一直试图找到一种方法来自动化GDB中跟踪程序控制流程的进度.

即使只是一种自动执行n命令的简单方法,您也可以查看调用例程的顺序.

我意识到你可以发出n xx是GDB逐步执行的次数的问题,但问题在于它显示的是命令而不是例程的地址!但是如果你n在GDB中手动按下(然后按回车键发出上一个命令),它会显示地址.

我在GDB中尝试了以下内容:

(after setting a breakpoint at say 0x0123456)
b *0x0123456
Run Code Online (Sandbox Code Playgroud)

GDB说<breakpoint 1 at 0x123456>.我键入:

commands 1
n 1000
c
end
Run Code Online (Sandbox Code Playgroud)

但它没有按预期循环,也没有显示地址位置:-(.

任何帮助,将不胜感激!当然必须简单的自动登录命令例程被调用??

trace gdb dynamic call-graph control-flow

16
推荐指数
4
解决办法
2万
查看次数

Linux内核的静态调用图生成

我正在寻找一种工具来静态生成Linux内核的调用图(对于给定的内核配置).生成的调用图应该是"完整的",在所有调用都包含在内的意义上,包括潜在的间接调用,我们可以假设它只能通过在Linux内核的情况下使用函数指针来完成.

例如,这可以通过分析函数指针类型来完成:这种方法会导致图中的多余边缘,但这对我来说没问题.

ncc似乎实现了这个想法,但是我没有成功地使它在3.0内核上运行.还有其他建议吗?

我猜这种方法也可能导致在使用函数指针强制转换的情况下缺少边缘,所以我也有兴趣知道这是否可能在Linux内核中.

作为旁注,似乎有其他工具能够对源进行语义分析以推断潜在的指针值,但是AFAICT,它们都没有被设计用于诸如Linux内核的项目中.

任何帮助将非常感激.

static-analysis function-pointers linux-kernel call-graph

16
推荐指数
1
解决办法
4306
查看次数

如何生成Java调用图

我想分析和理解某个Java应用程序,我认为调用图非常有用.我如何生成一个?我正在使用Eclipse.

java eclipse graph call-graph

14
推荐指数
2
解决办法
2万
查看次数

从matlab src代码生成调用图

我正在尝试为大约500个matlab src文件创建一个函数调用图.我无法找到任何可以帮助我对多个src文件执行相同操作的工具.

有人熟悉任何工具或插件吗?

如果没有任何此类工具,欢迎任何有关阅读6000行matlab代码而无需文档的建议.

matlab dependencies code-analysis call-graph

14
推荐指数
3
解决办法
6787
查看次数

clang能否为Xcode项目生成一个调用图(在Objective-C中?

我发现这个例子看起来像输出我想要的C++.如何在Xcode项目中为Objective-C代码完成?

我看到提到Doxygen能够创建一个调用图,但我找不到一个例子.

(我想更好地了解铿锵声,但很难开始......)

xcode objective-c clang call-graph

13
推荐指数
1
解决办法
4678
查看次数

如何使用LLVM生成调用图?

我正在研究为linux内核生成一个包含函数指针的调用图(有关更多信息,请参阅我之前的问题,Linux内核的静态调用图生成).我被告知LLVM应该适合这个目的,但我无法在llvm.org上找到相关信息

任何帮助,包括指向相关文档的指针,将不胜感激.

static-analysis llvm call-graph

13
推荐指数
1
解决办法
7539
查看次数

如何为Perl创建静态分析调用图?

我正在开发一个中等复杂的Perl程序.作为其开发的一部分,它必须经过修改和测试.由于某些环境限制,经常运行此程序不是一个易于操作的选项.

我想要的是Perl的静态调用图生成器.它不必涵盖每个边缘情况(例如,在eval中将变量重新定义为函数或反之亦然).

(是的,我知道有一个运行时调用图生成工具与Devel :: DprofPP,但运行时不能保证调用每个函数.我需要能够查看每个函数.)

perl static-analysis call-graph

12
推荐指数
2
解决办法
3872
查看次数