Как отладить syscall_thread_switch в iOS 8.3? - программирование

Как отладить syscall_thread_switch в iOS 8.3?

Начиная с перехода на iOS 8.3, я сталкиваюсь с этой ошибкой, когда основной поток застрянет в этом вызове. Несколько других потоков также застревают в этом вызове. В моем потоке ни один из моих кодов не ведет к этому вызову, поэтому я не понимаю, почему это происходит. Это случается случайным образом, иногда, когда вы нажимаете элемент панели кнопок, иногда при перерисовке диаграмм (используя ShinobiCharts) и т.д.

Вот трассировка стека из Xcode:

enter image description here

У кого-нибудь есть подсказка, почему это происходит и как это исправить? Это очень раздражает, потому что, когда я застрял там, мне нужно перезапустить приложение. Обратите внимание, что это происходит в симуляторе. Я нахожусь на ранней стадии разработки этого приложения и большую часть своего времени провожу в симуляторе. Я еще не видел, чтобы ошибка произошла на реальном устройстве, но, опять же, я не запускал приложение, которое часто на устройстве.

4b9b3361

Ответ 1

Стучите по дереву, но я думаю, что понял (по крайней мере, в моем случае).

В результате этого решения был поиск syscall_thread_switch, который привел меня к этому вопросу здесь: fooobar.com/info/122373/...

Что, если вы посмотрите на обратную трассировку, которую я связал (https://gist.github.com/Shalmezad/65ff89d20aa7e0a9d094), каждому syscall_thread_switch предшествует OSSpinLockLockSlow, что отмечает ответ выглядит как Livelock, но из-за низкого использования ЦП, более очевидно из тупика.

Просматривая мой код, я обнаружил, что для каждой фоновой задачи я каждый раз создавал новую dispatch_queue_t. Я так устарел, как это работает, чтобы использовать одну и ту же очередь, которая, похоже, устранила проблему.

Без дополнительной информации от Немезиды (в основном некоторые фрагменты кода, показывающие, как он настраивает фоновые задачи), я не могу ответить на их конкретный вопрос, однако это должно указывать людям в правильном направлении для устранения проблемы.