Приостановка процесса после присоединения к нему в Xcode?

#xcode #lldb

#xcode #lldb

Вопрос:

Используя Debug -> Attach to Process by PID or Name... в Xcode 8, я могу дождаться запуска программы, прежде чем присоединять к ней lldb, как process attach --name FOO --waitfor в командной строке.

Точно так же, как при запуске программы, командная строка приостанавливает работу программы при ее запуске, отбрасывая ее куда-нибудь в или macho или dyld . Оттуда я могу установить точки останова, а затем продолжить (или в основном запустить) программу и начать отладку.

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

Есть ли какой-либо способ либо добавить точки останова перед подключением, либо запретить Xcode автоматически возобновлять процесс?

Ответ №1:

В Xcode нет возможности не продолжать автоматически после присоединения. Однако есть несколько способов вставить ваши точки останова.

Если процесс, к которому вы подключаетесь, является процессом, который вы создали с помощью проекта Xcode, то вы можете отредактировать схему запуска этого проекта и на Info вкладке установить Launch значение Wait for Executable to launch затем нажать Run . Это сообщает Xcode, что объект, к которому вы подключаетесь, получает свои точки останова из этого проекта и устанавливает их перед продолжением. Затем просто установите файловые и строчные или символические точки останова в Xcode, и все в порядке.

Если вы не можете этого сделать, вы можете использовать тот факт, что точки останова, установленные в файле ~/.lldbinit, копируются во все новые цели, которые отлаживаются lldb. Это еще один способ принудительно ввести некоторые точки останова в сеанс отладки Xcode. Так что просто установите там свои точки останова, и они должны быть зафиксированы при присоединении.