有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用带有surefire的地址消毒器的java

我正在尝试使用GCC的地址消毒剂构建带有JNI函数的共享库,以便在测试中使用。由于jvm本身不是用Address sinitizer构建的,因此有一个LD_预加载技巧使其工作,如本issue中所述

因此,我将maven-surefire-plugin配置如下:

<configuration>
     <forkMode>always</forkMode>
     <environmentVariables>
           <LD_PRELOAD>/usr/lib/x86_64-linux-gnu/libasan.so.4.0.0</LD_PRELOAD>
     </environmentVariables>
</configuration>

但是mvn clean install仍然与SEGV发生如下崩溃:

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
ASAN:DEADLYSIGNAL
=================================================================
==1225==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000000 

构建失败。从this answer我得出结论,因为JVM使用信号来实现自己的目的,所以预计零地址读取会导致SEGV

有办法解决这个问题吗?在使用清理程序运行时,简单地忽略SEGV可能是安全的,类似于在使用gdb调试JVM时


共 (0) 个答案