使用带有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) 个答案