Как исправить сбои EXC_BAD_ACCESS KERN_INVALID_ADDRESS - PullRequest
0 голосов
/ 19 июня 2020

К сожалению, у меня возникают сбои (не могу воспроизвести) из живого приложения. Я пробовал очень разные вещи для закрытия, например, добавление [слабое Я] или создание сильного Я в закрытии, но ни один из них не работает.

Единственное, что я ' Я уверен, что пользователи обнаруживают sh после возвращения в приложение через долгое время (от 15 минут до 1 часа). Я запускал различные тесты Zomb ie и Allocation в инструментах, но ничего не знаю об утечках.

Я хотел бы знать, есть ли логический способ определить причину сбоев EXC_BAD_ACCESS KERN_INVALID_ADDRESS. Как добавить проверку, чтобы предотвратить ошибку cra sh или устранить проблему? Не могли бы вы предложить мне что-нибудь? Свойство

waterfallResponse дает сбой при установке объекта данных в вызове refreshAd .

@objc public class AdMediatorBanner {

...// properties
var waterfallResponse: AdMediatorZoneResponse?

...// code blocks

    AdMediatorManager.instance.refreshAd(self.zoneId!, self.adMediatorBannerId!) { [weak self] (data, errorCode) in
                guard let self = self else {
                    return
                }
                if data != nil {
                    self.waterfallResponse = data
                }

... // rest of closure code blocks

Cra sh Log:

Crashed: NSOperationQueue 0x1320da410 (QOS: UNSPECIFIED)
0  libobjc.A.dylib                0x19bc67d90 objc_release + 16
1  XXX                            0x104c213e4 destroy for AdMediatorZoneResponseItem + 4309242852 (<compiler-generated>:4309242852)
2  libswiftCore.dylib             0x1a9a473a0 swift_arrayDestroy + 84
3  libswiftCore.dylib             0x1a979e390 _ContiguousArrayStorage.__deallocating_deinit + 48
4  libswiftCore.dylib             0x1a9a5200c _swift_release_dealloc + 36
5  XXX                            0x104c54cac outlined consume of AdMediatorZoneResponse? + 4309453996 
6  XXX                            0x104c4e7d0 AdMediatorBanner.waterfallResponse.setter + 51 (AdMediatorBanner.swift:51)
7  XXX                            0x104c55910 partial apply for closure #2 in AdMediatorBanner.startAdRequest() + 353 (AdMediatorBanner.swift:353)
8  XXX                            0x104c3cc14 partial apply for closure #1 in AdMediatorManager.refreshAd(_:_:completionHandler:) + 96 (AdMediatorManager.swift:96)
9  XXX                            0x104cb5f9c partial apply for closure #1 in AdMediatorWebRequest.fetchDataFromServer(resultHandler:) + 4309852060 (<compiler-generated>:4309852060)
10 XXX                            0x104cb4e84 thunk for @escaping @callee_guaranteed (@guaranteed Data?, @guaranteed NSURLResponse?, @guaranteed Error?) -> () + 4309847684 (<compiler-generated>:4309847684)
11 CFNetwork                      0x19f1f5b18 CFNetServiceBrowserSearchForServices + 96332
12 CFNetwork                      0x19f206948 _CFHTTPMessageSetResponseProxyURL + 8176
13 Foundation                     0x19c30bcfc __NSBLOCKOPERATION_IS_CALLING_OUT_TO_A_BLOCK__ + 24
14 Foundation                     0x19c20dc3c -[NSBlockOperation main] + 104
15 Foundation                     0x19c30e03c __NSOPERATION_IS_INVOKING_MAIN__ + 24
16 Foundation                     0x19c20d914 -[NSOperation start] + 752
17 Foundation                     0x19c30ea68 __NSOPERATIONQUEUE_IS_STARTING_AN_OPERATION__ + 24
18 Foundation                     0x19c30e528 __NSOQSchedule_f + 184
19 libdispatch.dylib              0x19bbe4db4 _dispatch_block_async_invoke2 + 144
20 libdispatch.dylib              0x19bbd833c _dispatch_client_callout + 20
21 libdispatch.dylib              0x19bbdaaf8 _dispatch_continuation_pop + 408
22 libdispatch.dylib              0x19bbda258 _dispatch_async_redirect_invoke + 588
23 libdispatch.dylib              0x19bbe75c0 _dispatch_root_queue_drain + 348
24 libdispatch.dylib              0x19bbe7d9c _dispatch_worker_thread2 + 116
25 libsystem_pthread.dylib        0x19bc3f6d8 _pthread_wqthread + 216
26 libsystem_pthread.dylib        0x19bc459c8 start_wqthread + 8

1 Ответ

0 голосов
/ 19 июня 2020

Попробуйте назначить waterfallResponse в основной очереди, например

if data != nil {
    DispatchQueue.main.async { [weak self] in
       self?.waterfallResponse = data
    }
}

, и обязательно сделайте то же самое во всех других возможных местах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...