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



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



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



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



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

508   11  

11 ответов:

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

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

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

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

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

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

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

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

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

handle SIGKILL nostop noprint nopass

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

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

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

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

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

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

EDIT: это работало около 15 минут. Затем он вернулся к поднятию главного.м в Редакторе снова.

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

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

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

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

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

перейдите в Настройки - > поведение. Выберите "Выполнить завершает"в левой части. Установите флажок рядом с "показать вкладку" и введите имя вкладки. Я использую "редактировать". Таким образом, всякий раз, когда вы останавливаетесь, вы всегда будете возвращаться на вкладку под названием Edit.

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

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

стрелка вниз

стрелка

command-j

введите

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

Xcode - > Preferences

Под Поведение

нажмите на запуск запуска

флажок для [показать] отладчик с [текущие представления]

...работать на меня.

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

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

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

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

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

[переход к процессу 24957 поток 0x7403]

[переключение на процесс 24957 поток 0x207]

завершился с кодом выхода: 0

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

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

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

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

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

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

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

обновление: после обновления до последней версии Xcode, мне предлагается использовать LLDB вместо GDB. Проблема, кажется, исчезла сейчас.

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

  1. перейдите туда, где вы определяете свои точки останова (навигатор точек останова, согласно документации)
  2. нажмите на знак "+" в левом нижнем углу области навигации
  3. нажмите на Добавить точку останова исключения
  4. нажать кнопку Готово
  5. запустить приложение

Xcode показывает вам оскорбительную строку.

Comments

    Ничего не найдено.