2E7F63 06-01 17:39:19.760 2737 2737 F libc : invalid pthread_t 0xccf3b970 passed to libc
2E7F7C 06-01 17:39:19.764 2737 2737 F libc : Fatal signal 6 (SIGABRT), code -6 (SI_TKILL) in tid 2737 (baidu.appsearch), pid 2737 (baidu.appsearch)
2E806F 06-01 17:39:19.994 3364 3364 F DEBUG : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
2E8070 06-01 17:39:19.994 3364 3364 F DEBUG : Native Crash TIME: 113131087
2E8071 06-01 17:39:19.994 3364 3364 F DEBUG : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
2E8072 06-01 17:39:19.994 3364 3364 F DEBUG : Build fingerprint: 'Itel/F6308/itel-L6002P:9/PPR1.180610.011/OP-V009-20190529:user/release-keys'
2E8073 06-01 17:39:19.994 3364 3364 F DEBUG : Revision: '0'
2E8074 06-01 17:39:19.994 3364 3364 F DEBUG : ABI: 'arm'
2E8075 06-01 17:39:19.994 3364 3364 F DEBUG : pid: 2737, tid: 2737, name: baidu.appsearch >>> com.baidu.appsearch <<<
2E8076 06-01 17:39:19.994 3364 3364 F DEBUG : signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
2E8077 06-01 17:39:19.995 3364 3364 F DEBUG : Abort message: 'invalid pthread_t 0xccf3b970 passed to libc'
2E8078 06-01 17:39:19.995 3364 3364 F DEBUG : r0 00000000 r1 00000ab1 r2 00000006 r3 00000008
2E8079 06-01 17:39:19.995 3364 3364 F DEBUG : r4 00000ab1 r5 00000ab1 r6 ffd31f14 r7 0000010c
2E807A 06-01 17:39:19.995 3364 3364 F DEBUG : r8 00000000 r9 c5601928 r10 ffd320c8 r11 ffd32054
2E807B 06-01 17:39:19.995 3364 3364 F DEBUG : ip 00000041 sp ffd31f00 lr eff3206d pc eff29d96
2E807E 06-01 17:39:20.009 3364 3364 F DEBUG :
06-01 17:39:20.009 3364 3364 F DEBUG : backtrace:
2E807F 06-01 17:39:20.009 3364 3364 F DEBUG : #00 pc 0001cd96 /system/lib/libc.so (abort+58)
2E8080 06-01 17:39:20.009 3364 3364 F DEBUG : #01 pc 00064771 /system/lib/libc.so (__pthread_internal_find(long)+104)
2E8081 06-01 17:39:20.009 3364 3364 F DEBUG : #02 pc 000647ad /system/lib/libc.so (pthread_join+28)
2E8082 06-01 17:39:20.009 3364 3364 F DEBUG : #03 pc 00011d61 /data/data/com.baidu.appsearch/files/cybermedia/libs/6.3.2.9/libcyber-sdl.so
2E8083 06-01 17:39:20.009 3364 3364 F DEBUG : #04 pc 0002e58d /data/data/com.baidu.appsearch/files/cybermedia/libs/6.3.2.9/libcyber-player.so
2E8084 06-01 17:39:20.009 3364 3364 F DEBUG : #05 pc 0002ffa3 /data/data/com.baidu.appsearch/files/cybermedia/libs/6.3.2.9/libcyber-player.so
2E8085 06-01 17:39:20.009 3364 3364 F DEBUG : #06 pc 000385c5 /data/data/com.baidu.appsearch/files/cybermedia/libs/6.3.2.9/libcyber-player.so
2E8086 06-01 17:39:20.009 3364 3364 F DEBUG : #07 pc 0003c4e1 /data/data/com.baidu.appsearch/files/cybermedia/libs/6.3.2.9/libcyber-player.so
2E8087 06-01 17:39:20.009 3364 3364 F DEBUG : #08 pc 0000073b /data/data/com.baidu.appsearch/files/cybermedia/libs/6.3.2.9/oat/arm/cyber-media-dex.odex (offset 0x2000)
2E8A8A 06-01 17:39:35.875 3414 3746 F libc : Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x69646e7d in tid 3746 (Thread-63), pid 3414 (baidu.appsearch)
2E8A8F 06-01 17:39:36.063 3922 3922 F DEBUG : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
https://www.jianshu.com/p/348d6aa63feb
一、Android 8.0遇到的問題
1. 線程中斷:
- 描述:軟件中一個長期掛載執行的命令輪詢線程,中斷了
- 原因:Android 8.0判斷軟件處於未活躍狀態,會釋放軟件持有的所有Wake Lock,恰巧線程中調用Lock.wait,同步鎖,被系統喚醒後,線程結束
- 處理:增加運行標籤,重新啓動線程機制,增加sleep機制
2. invalid pthread_t 0x2243df2546 passed to libc
- 描述: 在JNI運行中報錯,invalid pthread_t passed to libc,查看代碼發現,在調用pthread_join()方法時報錯
- 原因:
- 檢測到線程隊列指針爲空的情況下還去調用分離線程會出現異常,在pthread_join中會調用__pthread_internal_find,https://github.com/aosp-mirror/platform_bionic/blob/master/libc/bionic/pthread_join.cpp
- 在__pthread_internal_find方法時https://github.com/aosp-mirror/platform_bionic/blob/master/libc/bionic/pthread_internal.cpp
- 處理:經檢測發現,由於c++代碼中不嚴謹的寫法導致了該問題,未啓動線程(未傳入線程指針)前,調用了pthread_join的方法,在以前的版本中,軟件沒有崩潰,所以沒有檢測到,修改後無問題
解決方法:
獲取當前系統版本,大於等於26的話,不再調用 pthread_detach