我有一个可以使用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异常而不是我定义的异常。另外,在捕获时,我尝试捕获特定的异常(标准以及定义的异常),但仍然会给出相同的错误。