Android報錯:Fatal signal 11 (SIGSEGV), code 1, fault addr 0x1150b4550 in tid 6236


工具:android studio3.5.2

進入logcat查看報錯日志:

 pid: 8125, tid: 8125, name: le.login_server  >>> com.example.login_server <<<
2020-02-27 16:55:47.079 8653-8653/? A/DEBUG: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x1150b4550

....
2020-02-27 16:55:47.085 8653-8653/? A/DEBUG: backtrace:
2020-02-27 16:55:47.085 8653-8653/? A/DEBUG:     #00 pc 000000000007b6c4  /data/app/com.example.login_server-1/lib/arm64/libcrypto.so (BN_div+104)
2020-02-27 16:55:47.085 8653-8653/? A/DEBUG:     #01 pc 0000000000081bf4  /data/app/com.example.login_server-1/lib/arm64/libcrypto.so (BN_nnmod+44)
2020-02-27 16:55:47.085 8653-8653/? A/DEBUG:     #02 pc 000000000007c490  /data/app/com.example.login_server-1/lib/arm64/libcrypto.so (BN_mod_exp_recp+216)
2020-02-27 16:55:47.085 8653-8653/? A/DEBUG:     #03 pc 0000000000001358  /data/app/com.example.login_server-1/lib/arm64/libnative_lib.so (_Z8encryLocv+268)
2020-02-27 16:55:47.086 8653-8653/? A/DEBUG:     #04 pc 0000000000001a88  /data/app/com.example.login_server-1/lib/arm64/libnative_lib.so (Java_com_example_login_1server_MyUtils_native_1lib_getk1k2+364)
2020-02-27 16:55:47.086 8653-8653/? A/DEBUG:     #05 pc 0000000000384eb4  /data/app/com.example.login_server-1/oat/arm64/base.odex (offset 0x35b000)

大家一定要仔細看看報error的日志,可以看到出現和run處彈出的bug相同處,也就是錯誤地址0x1150b4550,后面追溯:backtrace:這里面出現的錯誤具體路徑你應當熟悉(你的項目的路徑你肯定清楚啦)。

此下廢話,可不看:

我看到libcrypto.so我就明白大致就是我android項目中支持的c++文件在運行過程中報錯,尤其是看到了Java_com_example_login_1server_MyUtils_native_1lib_getk1k2,這是我c通過jni調用的一個函數,大概錯誤出現在這個回調函數里面,而在追溯路徑后面括號中的字符,是我調用的openssl函數,大概這些地方也出現問題了,我在網上百度了一些fatal signal報錯處理,但事實上大家因項目不同,不太容易碰到一個和你相同的問題,更何況時解決方法(與android版本和sdk有時候也有關系),所以大家更多時候是自己看看日志來調式處理。

軟件測試異常主要有:

因為我通過循環調用一個cpp方法(通過jni),軟件登錄后第一次調用顯示正常,在第二次調用時,界面自動退出並重新登錄,以此循環。。。日志報錯

解決方法:

此段廢話)因為明白了錯誤在cpp文件中,我去查看了cpp文件,首先看調用的地方,在子線程中,難道說子線程中不支持通過jni調用c++???我嘗試把函數調用放在線程外,很顯然,並沒有解決,於是我在函數調用處以及cpp文件內部設置斷點,debug來調試!第一次調用正常,第二次我進入cpp內部在進行大整數模余運算處給我報錯了!!!我去!我的大整數k1,k2在函數內部釋放空間后第二次調用沒有初始化,我的h,x大整數釋放空間后並沒有賦值為null,導致第二次調用時他的空間未分配的前提下直接使用,在一處while循環中直接進入死循環!

此段重要)我的出錯地點是:cpp文件中大整數初始化以及釋放空間機制不完善。

解決方法:每調用一次應當釋放空間並賦值為null,下一次調用判空后再初始化,當然也可以不用賦值為null,那么下次調用時就判空,直接進入初始化。經測試,問題解決。

如果你的報錯和我相似,但是問題不一樣,我建議你查看loacat追溯一下到底是哪里有問題,並debug判斷大致出現問題的地方,一點一點縮小問題區間對於大的project來說實在是太有用啦!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM