代码之家  ›  专栏  ›  技术社区  ›  St.Antario

使用带有surefire的地址消毒剂

  •  0
  • St.Antario  · 技术社区  · 6 年前

    我正在尝试与建立共享库 JNI 函数与GCC的地址消毒剂一起在测试中使用。由于jvm本身并不是用address sinitizer构建的,因此有一个LD峎u预加载技巧可以使其工作如本文所述 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 回复  |  直到 6 年前