Установите условную точку останова для определенного потока только в Xcode / LLDB

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

Мой вопрос: как мне установить точку останова, чтобы она зависела от определенного потока? т.е. он должен срабатывать только при выполнении в потоке 4?

ИЗМЕНИТЬ

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


person lms    schedule 18.01.2013    source источник


Ответы (2)


Я не думаю, что это отображается через пользовательский интерфейс Xcode Breakpoints, но в lldb вы можете изменить точку останова, чтобы она срабатывала только при совпадении (1) имени потока, (2) совпадения имени очереди отправки, (3) совпадения идентификатора потока или (4) совпадение порядкового номера потока. Вы можете указать эти критерии при создании точки останова (breakpoint set) или добавить эти критерии к существующей точке останова с помощью breakpoint modify. См. help breakpoint modify в окне консоли отладчика для списка допустимых аргументов.

person Jason Molenda    schedule 18.01.2013

Для отладки кода GDC вы можете использовать invoke-block $ gdb.

Чтобы иметь лучшее представление о том же ..

  1. Руководство по блокам и Grand Central Dispatch (и какао API использует их)

  2. Отладка с GDB

А также Как предполагается использовать dispatch_debug? уже здесь для руководства.

person alloc_iNit    schedule 18.01.2013