首页 > 解决方案 > 使用 __gxx_personality_v0 取消引用空指针

问题描述

我在 Android 中有一个 ndk-build 项目,我想在 3.2 中使用 Android Studio Profiler 进行分析。但我总是崩溃:

2019-02-20 10:10:42.369 21888-21888/? A/DEBUG: pid: 21705, tid: 21882, name: engine  >>> com.test.example <<<
2019-02-20 10:10:42.369 21888-21888/? A/DEBUG: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x1f
2019-02-20 10:10:42.369 21888-21888/? A/DEBUG: Cause: null pointer dereference
2019-02-20 10:10:42.369 21888-21888/? A/DEBUG:     r0 bc281b60  r1 ffffffff  r2 bb704199  r3 bb4e9400
2019-02-20 10:10:42.369 21888-21888/? A/DEBUG:     r4 bc281b08  r5 bc281b60  r6 f0230240  r7 bc281aa8
2019-02-20 10:10:42.369 21888-21888/? A/DEBUG:     r8 bb704100  r9 d149a598  sl 00000001  fp 00000000
2019-02-20 10:10:42.369 21888-21888/? A/DEBUG:     ip bb76c6f4  sp bc281aa8  lr bb6d4083  pc bb6d447e  cpsr 80000030
2019-02-20 10:10:42.372 21888-21888/? A/DEBUG: backtrace:
2019-02-20 10:10:42.372 21888-21888/? A/DEBUG:     #00 pc 002b047e  /data/app/com.test.example-JNm5Mn25Zd3obHmkwErCEg==/lib/arm/mylib.so
2019-02-20 10:10:42.372 21888-21888/? A/DEBUG:     #01 pc 002b007f  /data/app/com.test.example-JNm5Mn25Zd3obHmkwErCEg==/lib/arm/mylib.so
2019-02-20 10:10:42.372 21888-21888/? A/DEBUG:     #02 pc 002adee5  /data/app/com.test.example-JNm5Mn25Zd3obHmkwErCEg==/lib/arm/mylib.so
2019-02-20 10:10:42.372 21888-21888/? A/DEBUG:     #03 pc 002ade93  /data/app/com.test.example-JNm5Mn25Zd3obHmkwErCEg==/lib/arm/mylib.so (__gxx_personality_v0+270)
2019-02-20 10:10:42.372 21888-21888/? A/DEBUG:     #04 pc 0018175c  /data/data/com.test.example/libperfa_arm.so
2019-02-20 10:10:42.372 21888-21888/? A/DEBUG:     #05 pc 00182080  /data/data/com.test.example/libperfa_arm.so

据我所知,__gxx_personality_v0与C++中的异常机制有关。但是我该如何解决这个问题?

我唯一尝试过的是,如果我-fno-exceptions在我的库中添加标志,那么这个问题就解决了。但我想知道这里是否有其他解决方案,因为no-exception与 STL 库不一致。

标签: androidc++android-ndk

解决方案


推荐阅读