我正在尝试使用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
也许是安全的?