Я пытаюсь создать разделяемую библиотеку с JNI
функциями с помощью дезинфицирующего средства GCC для использования в тестах.Поскольку сам jvm не построен с использованием синитизатора адресов, существует трюк LD_PRELOAD, чтобы заставить его работать так, как описано в этой проблеме .
Итак, я настроил 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
при сбое сборки.Из этого ответа Я пришел к выводу, что из-за того, что JVM использует сигналы для своих собственных целей, ожидается SEGV, вызванный чтением по нулевому адресу.
Есть ли способ обойти это?Может быть, безопасно просто игнорировать SEGV
при работе с дезинфицирующими средствами, аналогичными при отладке JVM с gdb
?