使用带有surefire的地址清理器

时间:2019-01-30 12:02:05

标签: java jvm java-native-interface address-sanitizer

我正在尝试使用JNI函数和GCC的地址清理器来构建共享库,以在测试中使用。由于jvm本身不是使用adress初始化程序构建的,因此有一个LD_PRELOAD技巧可以使它按本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调试JVM一样,简单地忽略gdb也许是安全的?

0 个答案:

没有答案