FMDBBlockSQLiteCallBackFunction Crash trong ứng dụng không sử dụng makeFunctionNamed


102

Tôi đang làm việc trên một ứng dụng trong cửa hàng ứng dụng, dùng FMDBđể tương tác với cơ sở dữ liệu sqlite của nó. Chúng tôi đã nhận được một số báo cáo sự cố có dấu vết ngăn xếp như thế này:

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

Tuy nhiên, từ việc đọc các FMDBmã nó trông giống như FMDBBlockSQLiteCallBackFunctionchỉ được gọi là gọi lại cho SQLitecác chức năng tạo ra sử dụng FMDatabasecủa makeFunctionNamed:maximumArguments:withBlock:phương pháp, mà chúng tôi không sử dụng ở tất cả.

Bất kỳ ý tưởng nào có thể gây ra sự cố như thế này?


Điều này có xảy ra sau khi cập nhật ứng dụng hoặc sau khi một cái gì đó khác đã được thay đổi hay không?

Không, điều này đã xảy ra không thường xuyên kể từ khi ra mắt. Chúng tôi không thể tái tạo trong nhà và chỉ có các báo cáo sự cố sẽ được thông báo vào thời điểm này.
Greg

1
didFinishBiểu tượng đó có thể là một gợi ý. Có lẽ bạn có một loại điều kiện chủng tộc. Tức là phần cứng dành cho nhà phát triển của bạn chạy nhanh hơn một số phần cứng của người dùng, vì vậy bạn không thấy sự cố xảy ra. Tôi khuyên bạn nên làm hỏng phần cứng của mình bằng cách nào đó và xem sự cố có xuất hiện với bạn hay không. Nếu vậy, gỡ lỗi từ đó sẽ dễ dàng.
donjuedo

Tôi nghĩ rằng các ký hiệu trong dấu vết ngăn xếp có thể không chính xác. Tôi vừa gặp sự cố trong bản dựng phát triển của ứng dụng trông giống hệt về đường dẫn mà tôi đang ghi bằng CLS_LOG và đó là trường hợp không liên quan đến đại biểu FMDB không được đặt thành nil trên dealloc.
Greg

@Greg Có thêm thông tin về điều này không? Chúng tôi đang thấy điều tương tự trong một trong các ứng dụng của mình. Bạn có đang sử dụng ARC không?
funkybro

Câu trả lời:


1

Điều này didFinishlàm cho nó trông giống như bạn có thể có một điều kiện cuộc đua trên dòng này:

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

Cố gắng giả lập phần cứng chậm để tái tạo trạng thái của người dùng cuối.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.