Как перехватить EXC_BAD_ACCESS, когда NSKeyedArchiver вызывает encodeObject - PullRequest
0 голосов
/ 08 июня 2019

Модульный тест, который обычно запускается без проблем, теперь завершается с ошибкой EXC_BAD_ACCESS (code = EXC_I386_GPFLT). Вот соответствующая трассировка стека:
enter image description here Очевидно, что элемент массива не может быть закодирован, возможно, из-за сбоя доступа к словарю, использующему его хеш-значение. Поскольку это произошло в потоке SQLQueue, я подозреваю, что другой поток изменил словарь во время кодирования.
Вопрос в том, как отловить такую ​​проблему?

РЕДАКТИРОВАТЬ: я не могу включить Thread Sanitizer в схеме, так как у меня есть расширение Watch, и это предотвращает его.

1 Ответ

0 голосов
/ 08 июня 2019

Ваш вопрос, как поймать аварию? Если да,

для Objective-C, NSSetUncaughtExceptionHandler,

для Swift

signal(SIGABRT, handler)
signal(SIGILL, handler)
signal(SIGSEGV, handler)
signal(SIGFPE, handler)
signal(SIGBUS, handler)
signal(SIGPIPE, handler)

Обновление: Я искал только сейчас, похоже, что другие парни обсуждали это

Как поймать сбой Swift и сделать некоторые записи

...