Xcode 4.2 перескакивает в main.m каждый раз после остановки симулятора

Это больше общего раздражения. Каждый раз после остановки симулятора Xcode почему-то прыгает на main.m. На левом навигаторе он переходит к Навигатору отладки.

Есть ли способ исправить это?

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

Эта проблема не нова, но, похоже, все хуже. На момент написания этого я был на семенах GM, но эта проблема сохраняется в финале XCode 4.2. Это не было проблемой в предыдущих версиях XCode.

Ответ 1

Когда мы начинаем отладку от xcode, отладчик настраивается для мониторинга сигналов от ОС. Когда мы нажимаем кнопку остановки в XCode (или нажимаем cmd + R, который сначала останавливает существующий экземпляр, а затем пытается запустить новый, несколько равный тому, что мы сначала нажимаем ручную остановку, а затем запускаем) SIGKILL отправляется в отладчик.

Всякий раз, когда причина прерывания происходит вне приложения (другими словами, все случаи отправки SIGKILL, например, кнопка остановки), отладчик переходит на main, так как main - это корень приложения, а где ваше приложение соответствует ОС. Отладчик не имеет возможности определить, почему этот SIGKILL выдается (нажатие кнопки остановки в xcode/нажмите cmd + R/delete приложение из панели многозадачности и т.д.), Но он рассматривает SIGKILL как внешнее прерывание и ничего не связано с вашим кодом. Так что он прыгает на главный.

Если причина прерывания извне приложения (например, сбой приложения /SIGABRT ), отладчик обрабатывает его и перескакивает туда, где мы обычно видим.

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

  • Вы можете сделать, как предположил Гейб. Как сказал BBonified, это похоже на группу-помощника, но я думаю, что он должен работать (лично я никогда не пробовал это)

  • Сообщить об ошибке/запросе для функции здесь. Позвольте мне рассказать вам не являются первыми. Сообщается об ошибке. Видеть this и this. Но у меня нет большой надежды на положительное действие Apple.

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

Ответ 2

Я думаю, это справедливо назвать его ошибкой, Xcode 3 специально подавил этот бесполезный артефакт.

У меня был успех (четыре раза и подсчет) с этим однострочным в ~/.gdbinit:

handle SIGKILL nostop noprint nopass

Взято из этого руководства gdb:

http://www.delorie.com/gnu/docs/gdb/gdb_39.html

Не уверен, что это относится и к lldb.

Ответ 3

Я пробовал то, что предложил Дэвид, но это не сработало для меня, поэтому я попробовал нечто подобное:

  • Откройте "Настройки", выберите вкладку "Поведение".
  • Выберите "Запустить выходы неожиданно" в левой колонке.
  • Выберите "Показать отладчик с текущими представлениями".

Я использую Xcode версии 4.2 build 4D199.

EDIT. Это работало около 15 минут. Затем он снова вернул main.m в редактор.

Ответ 4

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

Все разрешимо через настройки в настройках пользователя Xcode:

  • Просто перейдите к "run completees"
  • Найдите строку "Показать" и установите флажок
  • В той же строке измените цель, чтобы перейти в "Текущий" в выпадающем меню.

Там вы идете. Теперь Xcode не будет перемещать ваш вид редактирования. Наслаждайтесь.

PS: версия Xcode 4.2 Build 4C199

Ответ 5

Перейдите в раздел Настройки → Поведения. Выберите "Запустить завершение" в левой части. Установите флажок "Показать вкладку" и введите имя вкладки. Я использую "Изменить". Таким образом, всякий раз, когда вы останавливаетесь, вы всегда вернетесь к вкладке "Редактировать".

Ответ 6

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

(подождите каждые 0,1 секунды после каждого шага)

командный период

командно-1

стрелка вниз

стрелка вверх

командной J

ввести

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

Ответ 7

Xcode → Настройки

В разделе "Поведение"

Нажмите "Запуск запуска"

Флажок для [Show] отладчика с [Текущие представления]

... работал у меня.

Ответ 8

Ни одна из настроек настройки предпочтений не работает для меня.

Я смог отслеживать оскорбительную последовательность событий. Сообщение об ошибке SIGKILL появится при запуске приложения и использовании нескольких потоков. Например, при использовании UIWebView в моем приложении он прерывается до main.m. Я подтвердил, что, когда UIWebView не вызывается, XCode можно остановить без сообщения об ошибке SIGKILL, возвращающего пользователя в main.m

Похоже, есть, по крайней мере, два потока, которые запускаются при инициализации UIWebView. Тем не менее, любые потоки, созданные вами во время работы вашего приложения, приведут к тому, что SIGKILL неправильно сообщит XCODE, чтобы вернуться к основному.

Вы можете видеть это в GDB, что есть переключатель перед SIGKILL:

[Переход к процессу 24957 thread 0x2103]

[Переключение на процесс 24957 thread 0x7403]

[Переход к процессу 24957 thread 0x207]

Программа завершена кодом выхода: 0

Это определенно еще ошибка с XCODE, которая, надеюсь, будет исправлена.

На данный момент, если вы избегаете выполнения кода, запускающего отдельный поток, он не изменит представление назад на main.m. Для кода, запускающего дополнительные потоки, я бы рекомендовал выйти из симулятора, чтобы вернуться в режим редактирования в XCODE.

Ответ 9

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

UPDATE. После обновления до последнего Xcode мне предлагается использовать LLDB вместо GDB. Теперь проблема исчезла.

Ответ 10

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

Я обойду его, используя "Помощник редактора" вместо редактора в качестве основного окна редактирования. Вы получаете доступ к редактору помощника, используя маленькую маленькую кнопку галстука-бабочки в правом верхнем углу окна.

Вы можете установить его в "Manual". Нажмите на кнопку, которая находится на левой стороне крошечной дорожки в верхней части кадра редактора помощника, и выберите всплывающее меню в раскрывающемся меню. Параметр "Ручной" позволяет вам выбрать файл, который вы редактируете, щелкнув вторую, чтобы отложить крошку от тропы и выбрать файл из всплывающего окна, которое появляется.

Затем я просто свожу к минимуму размер главного редактора или использую его как дополнительное окно редактирования, полезно, учитывая, что вы больше не можете разделить редакторы на несколько кадров. Далеко от идеала - но это XCode 4 для вас.

Ответ 11

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

  • Перейдите к тому, где вы определяете свои точки останова (навигатор точек останова, согласно документации)
  • Нажмите знак "+" в левом нижнем углу области навигации
  • Нажмите кнопку "Добавить контрольную точку исключения"
  • Нажмите Готово
  • Запустите приложение

Xcode показывает вам линию нарушения.