ゲーム テストの問題: 原因: java.lang.Error: シグナル 11 (SIGSEGV)、コード 1 (SEGV_MAPERR)、障害アドレス 00000004

同社が開発した小規模なゲームは、Monkey テスト中に個々のモデルで常に同じ問題に遭遇しました。ここに記録します。

エラーログは次のとおりです。

Caused by: java.lang.Error: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000004
Build fingerprint: 'xxxxx 测试信息'
Revision: '0'
pid: 21666, tid: 21847, name: UnityMain  >>> xxx 游戏包名 <<<
    r0 980ae958  r1 00000004  r2 00430000  r3 b11dc6dd
    r4 980ae958  r5 980ae958  r6 ffffffff  r7 980afe78
    r8 00000000  r9 a4b2ce00  sl 00000001  fp 980ae948
    ip 002e3688  sp 980ae938  lr 9738a941  pc 978460f8  cpsr 86371100

	at libunity.006ee0f8(Native Method)
	at libunity.0023293d(Native Method)
	at Unknown.fffffffd(Unknown Source:0)

Unity 2019.2.9 を使用しています。このエラーが発生した場合、次の 2 つのクラッシュに関連している可能性もあります。

クラッシュ1:

Caused by: java.lang.Error: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0000000000000008
Build fingerprint: 'xxxxx 测试信息'
Revision: '0'
pid: 13512, tid: 13788, name: UnityMain  >>> xxx 游戏包名 <<<
    x0   0000000000000008  x1   0000000000000040  x2   000000705c34e4be  x3   0000000000000003
    x4   0000000000000054  x5   0000007035b181e3  x6   00000000000001bc  x7   abababababababab
    x8   000000700de21110  x9   0000000000000000  x10  0000000000430000  x11  0000000000010001
    x12  0000000000000000  x13  0000000010000000  x14  0000000000000001  x15  0000007030298583
    x16  0000007035dc0e98  x17  000000705de80b88  x18  0000007035af326d  x19  000000700620df10
    x20  000000702ee547b0  x21  0000007035de3000  x22  0000000000000001  x23  000000700de234e8
    x24  000000700de21f40  x25  0000000012f0af80  x26  00000000701b89d8  x27  0000000070873148
    x28  0000000070274b70  x29  000000007030cb30  x30  00000070352714d4
    sp   000000700de210e0  pc   0000007035832e7c  pstate 0000000060000000

	at [vdso].(:0)
	at libunity.(:0)

crash2 はタイムアウトの問題です。

Subject: Input dispatching timed out (Waiting because no window has focus but there is a focused application that may eventually add a window when it finishes starting up.)

現在、ある程度解析できているのは最初の問題のみですが00000004、解析方法はNDKのarm-linux-andr
oideabi-addr2lineツールを使用して、ある程度クラッシュの問題を特定します。具体的な利用方法については、こちらの記事をご覧ください。

分析すると、これがその方法006ee0f8に該当し、これがその方法に該当することがわかり、それ以外に有益な情報はありません。UnitySendMessage0023293dJNI_OnUnload

また、Google で検索したところ、この問題はおそらくApplication.Quit()Unity に関連しているのではないかと現時点では推測されています。結局のところ、テスト条件がなく、テストパーティからも詳細な情報が提供されていないため、この方法を使用した後、プログラムを終了します。アプリアイコンを再度タップするか、その他の操作を行うとクラッシュが発生する可能性があります。
インターネット上の 1 つの解決策は、Android 側で OnPause() メソッドをオーバーライドすることです。

    @Override
    protected void onPause() {
    
    
        if(!isFinish) mUnityPlayer.pause();
        super.onPause();
    }

しかし、この問題は書き直した後も発生し、テストマシンの機種も比較的ランダムで、現時点ではUnityの公式フォーラムでもこの問題に対する明確な解決策はありません。

一時的な回避策:
最終的に、Application.Quite()そのパーツを使用しているコードをログアウトすることにし、最終的にテストに合格しました。

PS:
最初にこの機能を追加した理由は、Google Play にアクセスしたい場合は、ゲーム内でゲームを終了する機能を提供する必要があるとパブリッシャーが言ったためで、終了ファンクション キーを追加し、また実装しました。システムファンクションキーで終了 ゲームのロジックですが、こんなに難しい問題が現れるとは予想していませんでした。また、Google Play でいくつかのゲームをダウンロードしましたが、関連する終了ロジックがないため、少しだまされたように感じます。

おすすめ

転載: blog.csdn.net/EverNess010/article/details/107611115