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

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

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

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

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

65 голосов | спросил pixelfreak 7 +04002011-10-07T05:40:19+04:00312011bEurope/MoscowFri, 07 Oct 2011 05:40:19 +0400 2011, 05:40:19

11 ответов


0

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

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

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

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

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

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

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

ответил Krishnabhadra 3 42011vEurope/Moscow11bEurope/MoscowThu, 03 Nov 2011 14:34:29 +0400 2011, 14:34:29
0

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

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

handle SIGKILL nostop noprint nopass

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

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

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

ответил 9 32011vEurope/Moscow11bEurope/MoscowWed, 09 Nov 2011 20:01:07 +0400 2011, 20:01:07
0

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

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

Я использую XCode версии 4.2, сборка 4D199.

РЕДАКТИРОВАТЬ . Это продолжалось около 15 минут. Затем он снова вернулся к открытию main.m в редакторе.

ответил avance 19 62011vEurope/Moscow11bEurope/MoscowSat, 19 Nov 2011 00:36:28 +0400 2011, 00:36:28
0

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

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

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

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

PS: версия Xcode 4.2, сборка 4C199

ответил David 16 32011vEurope/Moscow11bEurope/MoscowWed, 16 Nov 2011 17:26:02 +0400 2011, 17:26:02
0

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

ответил Gabriel 3 42011vEurope/Moscow11bEurope/MoscowThu, 03 Nov 2011 01:48:10 +0400 2011, 01:48:10
0

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

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

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

командно-1

стрелка вниз

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

командной J

ввести

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

ответил David 31 SatEurope/Moscow2011-12-31T02:03:41+04:00Europe/Moscow12bEurope/MoscowSat, 31 Dec 2011 02:03:41 +0400 2011, 02:03:41
0

Xcode -> Предпочтения

Под поведением

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

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

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

ответил Jeffrey Berthiaume 19 Jam1000000amThu, 19 Jan 2012 11:49:28 +040012 2012, 11:49:28
0

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

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

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

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

  

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

     

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

     

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

     

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

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

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

ответил Lazarus 2 FebruaryEurope/MoscowbThu, 02 Feb 2012 03:00:51 +0400000000amThu, 02 Feb 2012 03:00:51 +040012 2012, 03:00:51
0

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

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

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

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

ответил delany 14 MarpmWed, 14 Mar 2012 21:16:21 +04002012-03-14T21:16:21+04:0009 2012, 21:16:21
0

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

ОБНОВЛЕНИЕ . После обновления до последней версии X-кода мне предлагается использовать LLDB вместо GDB. Кажется, проблема исчезла.

ответил pixelfreak 6 FebruaryEurope/MoscowbMon, 06 Feb 2012 03:13:30 +0400000000amMon, 06 Feb 2012 03:13:30 +040012 2012, 03:13:30
0

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

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

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

ответил Jeronimo Robles 16 MaramSat, 16 Mar 2013 00:26:42 +04002013-03-16T00:26:42+04:0012 2013, 00:26:42

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132