gpt4 book ai didi

java jni异常访问冲突

转载 作者:行者123 更新时间:2023-12-01 16:33:42 25 4
gpt4 key购买 nike

我使用 JNI 的 java 应用程序崩溃,hs_err_pid 文件给出错误“异常访问冲突”。操作系统为Windows VISTA。

据我所知,我的 native 代码非法写入不属于它的内存块。

我过去曾在 Linux 上的纯 native 代码上使用 valgrind 来检测此类问题。

但是当使用 java 时,valgrind 就会失败并且无法工作。

您建议使用什么(如果有)方法来识别有问题的代码?

我不可能手动挖掘 native 代码(几百万行)来识别它。

最佳答案

我终于能够解决这个问题了。我想我会在这里发布该过程,以防其他人遇到类似情况。

第 1 步:使用正确的调试符号构建 native 代码。编译器标志可能类似于

"-g -rdynamic -O0"
.

第 2 步:以下 valgrind 命令应该可以完成这项工作。


valgrind --error-limit=no --trace-children=yes --smc-check=all --leak-check=full --track-origins=yes -v $JAVA -XX:UseSSE=0 -Djava.compiler=NONE $JAVA_ARGS

在上面的命令中,$JAVA 是 java 可执行文件,$JAVA_ARGS 是 java 程序的参数。

一旦成功启动,将需要更多数量级的时间才能完成执行。 Valgrind 将打印数千个错误(大多数与 jvm 有关,可以忽略)。不过,您可以识别与您的 jni 代码相关的代码。

这个通用策略应该适用于大多数 native 内存相关的问题。

关于java jni异常访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11673128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com