我有一个很奇怪的问题!
我的应用程序在JNI(C代码)部分中的pthread_getspecific之后崩溃了,但是有什么奇怪的,那是因为它没有直接崩溃,因为我在崩溃之前多次使用这个函数,一切都很好。
所以,这里是崩溃附加的C代码:
int *compteur;
__android_log_print(ANDROID_LOG_INFO, "JNI", "before getspecific key : %d",key);
compteur=(int*)pthread_getspecific(key);
__android_log_print(ANDROID_LOG_ERROR, "JNI", "error %s",strerror(errno));
__android_log_print(ANDROID_LOG_INFO, "JNI", "pointeur : %ld",*compteur);
(*compteur)=(*compteur)-1;
if ((*compteur)==0)
{
pthread_mutex_unlock(&mutex));
}
logcat告诉我:
> before getspecific key : 13
> error Unknown error: 0
> pointeur : 1
> before getspecific key : 13
> error Unknown error: 0
> pointeur : 1
> before getspecific key : 13
> error Unknown error: 0
CRASH
所以使用ndk-stack我有:
$home>adb logcat | ndk-stack -sym obj
/local/armeabi
********** Crash dump: **********
Build fingerprint: 'archos/G9A80/A80:3.2.1/HTK75D/20120103.181511:user/release-keys'
pid: 7322, tid: 7332 >>> com.prg.main <<<
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000000
Stack frame #00 pc 00012532 /data/data/com.prg.main/lib/libPrg.so (the function where the crash appens): Routine
(the function where the crash appens) in myfile.c:75
...
Stack frame #04 pc 00011770 /system/lib/libc.so (__thread_entry)
Stack frame #05 pc 000112c4 /system/lib/libc.so (pthread_create)
Crash dump is completed
如果您有任何想法可以解决我的问题,欢迎您