Как я могу получить точки останова / журналы / повышенную видимость, когда мой главный поток блокируется?

В нескончаемом поиске отзывчивости пользовательского интерфейса я хотел бы получить больше информации о случаях, когда основной поток выполняет операции блокировки.

Я ищу какой-то «режим отладки», или дополнительный код, или ловушку, или что-то еще, с помощью чего я могу установить точку останова / журнал / что-то, что попадет, и позволит мне проверить, что происходит, если мой основной поток «добровольно» блоки для ввода-вывода (или по любой другой причине, на самом деле), кроме простоя в конце цикла выполнения.

Раньше я смотрел на продолжительность настенных часов цикла выполнения, используя наблюдатель цикла выполнения, и это полезно для выявления проблемы, но к тому времени, когда вы сможете проверить, уже слишком поздно, чтобы понять, что это делал, потому что ваш код уже выполнен для этого цикла цикла выполнения.

Я понимаю, что есть операции, выполняемые UIKit / AppKit только для основного потока, которые вызывают ввод-вывод и вызывают блокировку основного потока, поэтому в определенной степени это безнадежно (например, доступ к монтажному столу кажется потенциально блокирующей операцией только с основным потоком), но что-то было бы лучше, чем ничего.

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

10
задан ipmcc 16 December 2011 в 22:40
поделиться