ASAN在throw语句中给出“检测到堆栈损坏”错误

时间:2018-10-26 11:53:45

标签: android address-sanitizer

我有一个可以使用ASAN编译的工作应用程序,用于识别内存问题。 APP现在崩溃,在throw语句(下面的GetString中的最后一条语句)上出现错误“检测到堆栈损坏”。这是示例代码:

JNIEXPORT jstring JNICALL
Java_com_xxx_ReadFromDb(JNIEnv* env, jobject jobj, jstring key)
{
    if (key == nullptr)
    {
        return nullptr;
    }

    NAndroid::JString jkey(key);
    std::string val;
    try
    {
        **val = Test::GetInstance()->GetString(jkey.GetUTFString());**
    }
    catch (...)
    {
        return nullptr;
    }
    return env->NewStringUTF(val.c_str());
}


std::string Test::GetString(const std::string& key)
{
    bool result = dbVar->GetString(key);
    if (result)
    {
        /* Do something here */
    }
    else
    {
        ***throw NoSqlDBException(std::string("key not present ").append(key));***
    }
}

当我打开APP时,它出现以下错误:

10-26 15:02:07.514 23220-23220/? A/DEBUG: pid: 23187, tid: 23187, name: yyy  >>> xxx <<<  
10-26 15:02:07.514 23220-23220/? A/DEBUG: signal 6 (SIGABRT), code -6   (SI_TKILL), fault addr --------  
10-26 15:02:07.517 23220-23220/? A/DEBUG: Abort message: 'stack corruption detected'  
10-26 15:02:07.517 23220-23220/? A/DEBUG:     r0 00000000  r1 00005a93  r2 00000006  r3 00000008  
10-26 15:02:07.517 23220-23220/? A/DEBUG:     r4 eaa9b58c  r5 00000006  r6 eaa9b534  r7 0000010c  
10-26 15:02:07.517 23220-23220/? A/DEBUG:     r8 1ff5f94c  r9 ffafcb8c  sl ffafcc50  fp e4900fd8  
10-26 15:02:07.517 23220-23220/? A/DEBUG:     ip 00000002  sp ffafc9f0  lr e8ff04c7  pc e8ff2d30  cpsr 600e0010  
10-26 15:02:07.521 23220-23220/? A/DEBUG: backtrace:  
10-26 15:02:07.521 23220-23220/? A/DEBUG:     #00 pc 0004ad30  /system/lib/libc.so (tgkill+12)  
10-26 15:02:07.521 23220-23220/? A/DEBUG:     #01 pc 000484c3  /system/lib/libc.so (pthread_kill+34)  
10-26 15:02:07.521 23220-23220/? A/DEBUG:     #02 pc 0001dd99  /system/lib/libc.so (raise+10)  
10-26 15:02:07.521 23220-23220/? A/DEBUG:     #03 pc 00019521  /system/lib/libc.so (__libc_android_abort+34)  
10-26 15:02:07.521 23220-23220/? A/DEBUG:     #04 pc 00017160  /system/lib/libc.so (abort+4)  
10-26 15:02:07.521 23220-23220/? A/DEBUG:     #05 pc 0001bd97  /system/lib/libc.so (__libc_fatal+22)  
10-26 15:02:07.521 23220-23220/? A/DEBUG:     #06 pc 000491e7  /system/lib/libc.so (__stack_chk_fail+6)  
10-26 15:02:07.521 23220-23220/? A/DEBUG:     #07 pc 0011fc47  AAA.so (_ZN7XYZ11Test9GetStringERKSs+810)  
10-26 15:02:07.521 23220-23220/? A/DEBUG:     #08 pc 00fd0d27  BBB.so (Java_com_xxx_ReadFromDb+430)  
10-26 15:02:07.521 23220-23220/? A/DEBUG:     #09 pc 025a7fc1  CCC.odex (offset 0x2514000)  
10-26 15:02:08.635 2403-2403/? E/lowmemorykiller: Error writing /proc/23187/oom_score_adj; errno=22  

我已经尝试返回std异常而不是我定义的异常。另外,在捕获时,我尝试捕获特定的异常(标准以及定义的异常),但仍然会给出相同的错误。

0 个答案:

没有答案