加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Valgrind和Java

发布时间:2020-12-14 19:27:18 所属栏目:Java 来源:网络整理
导读:我想使用Valgrind 3.7.0来查找我的 Java本机代码中的内存泄漏.我正在使用jdk1.6.0._29. 为此,我必须设置–trace-children = yes标志.设置该标志,我不再可以在任何java应用程序上运行valgrind,甚至可以像以下命令: valgrind --trace-children=yes --smc-chec
我想使用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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读