makeFunctionNamedを使用していないアプリでFMDBBlockSQLiteCallBackFunctionがクラッシュする


102

私はFMDB、sqliteデータベースとのやり取りに使用するアプリストアにあるアプリに取り組んでいます。次のようなスタックトレースを含むクラッシュレポートをいくつか受け取りました。

Thread : Crashed: NSOperationQueue 0x170239c20 :: NSOperation 0x17024d7d0 (QOS: LEGACY)
0  libobjc.A.dylib                0x000000019701c0b4 objc_retain + 20
1  MyApp                          0x00000001002bdff4 FMDBBlockSQLiteCallBackFunction
2  MyApp                          0x00000001002bdb1c FMDBBlockSQLiteCallBackFunction
3  MyApp                          0x00000001002b66b4 FMDBBlockSQLiteCallBackFunction
4  MyApp                          0x00000001002980fc FMDBBlockSQLiteCallBackFunction
5  MyApp                          0x000000010029f20c FMDBBlockSQLiteCallBackFunction
6  CFNetwork                      0x00000001851475a4 __49-[__NSCFLocalSessionTask _task_onqueue_didFinish]_block_invoke + 300
7  Foundation                     0x00000001866bf1c4 __NSBLOCKOPERATION_IS_CALLING_OUT_TO_A_BLOCK__ + 16
8  Foundation                     0x0000000186610604 -[NSBlockOperation main] + 96
9  Foundation                     0x00000001866001cc -[__NSOperationInternal _start:] + 636
10 Foundation                     0x00000001866c1f28 __NSOQSchedule_f + 228
11 libdispatch.dylib              0x0000000197655954 _dispatch_client_callout + 16
12 libdispatch.dylib              0x00000001976600a4 _dispatch_queue_drain + 1448
13 libdispatch.dylib              0x0000000197658a5c _dispatch_queue_invoke + 132
14 libdispatch.dylib              0x0000000197662318 _dispatch_root_queue_drain + 720
15 libdispatch.dylib              0x0000000197663c4c _dispatch_worker_thread3 + 108
16 libsystem_pthread.dylib        0x000000019783522c _pthread_wqthread + 816

ただし、FMDBコードを読み取ると、のメソッドを使用して作成さFMDBBlockSQLiteCallBackFunctionれたSQLite関数のコールバックとしてのみ呼び出されるように見えますが、これはまったく使用していません。FMDatabasemakeFunctionNamed:maximumArguments:withBlock:

このようなクラッシュを引き起こす可能性のあるアイデアはありますか?


これは、アプリの更新後、または他の何かが変更された後、または突然実行された後に発生しましたか?

いいえ、これは発売以来、散発的に発生しています。社内で再現することはできず、現時点ではクラッシュレポートしかありません。
グレッグ

1
そのdidFinishシンボルはヒントかもしれません。たぶん、あなたはある種の競合状態にあります。つまり、開発者のハードウェアは一部のユーザーのハードウェアよりも高速に実行されるため、問題が発生することはありません。どういうわけかハードウェアを停止して、問題が発生するかどうかを確認することをお勧めします。もしそうなら、そこからのデバッグは簡単なはずです。
donjuedo

スタックトレースのシンボルが正しくない可能性があります。CLS_LOGを使用してログに記録しているブレッドクラムに関して同一に見えるアプリの開発ビルドでクラッシュに遭遇しました。これは、deallocでnilに設定されていないFMDBデリゲートと無関係の場合でした。
グレッグ

@Gregこれに関する詳細情報はありますか?私たちは同じことを私たちのアプリの一つで見ています。ARCを使用していましたか?
funkybro 2015

回答:


1

これdidFinishにより、次の行で競合状態が発生する可能性があります。

6  CFNetwork                      0x00000001851475a4 __49-[__NSCFLocalSessionTask _task_onqueue_didFinish]_block_invoke + 300

エンドユーザーの状態を再現するために、低速のハードウェアをエミュレートしてみてください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.