我想使用Valgrind 3.7.0来查找我的
Java本机代码中的内存泄漏.我正在使用jdk1.6.0._29.
为此,我必须设置–trace-children = yes标志.设置该标志,我不再可以在任何java应用程序上运行valgrind,甚至可以像以下命令:
valgrind --trace-children=yes --smc-check=all java -version
将收到错误消息:
Error occurred during initialization of VM Unknown x64 processor: SSE2 not supported
我看过这个链接:https://bugs.kde.org/show_bug.cgi?id=249943,但没有用.
运行程序没有Valgrind或没有–trace-children标志是罚款.
有人有什么想法可以做什么?
解决方法
您必须禁用JIT在valgrind下运行JVM,如下所示:
valgrind java -Djava.compiler=NONE ...
另外,如果最终使用生成的抑制(而且很有可能会这样!),则生成的抑制的调用堆栈的深度可能会出现问题,这在JVM下运行时更有可能发生.
在最近版本的valgrind中,生成的抑制可以包含比由valgrind / memcheck本身处理的更深层次的调用堆栈.这个问题的症状是valgrind意外终止,消息“堆栈跟踪中的调用者太多”.
这个问题很容易修复:在构建valgrind之前,编辑文件coregrind / m_errormgr.c并将#define中的硬编码值更改为更大的值(我使用99):
/ *抑制中上下文的最大呼叫者数. * /
#define VG_MAX_SUPP_CALLERS 99
然后根据文档构建和安装valgrind.