Xcode всегда останавливается на main.m после сбоя - PullRequest
30 голосов
/ 30 ноября 2011

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

Теперь с Xcode 4.2, каждый раз, когда приложение падает, оно останавливается на main.m в этой строке

int retVal = UIApplicationMain(argc, argv, nil, @"AppDelegate");

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

есть ли способ заставить его снова работать правильно?

спасибо

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

Ответы [ 2 ]

45 голосов
/ 30 ноября 2011

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

РЕДАКТИРОВАТЬ: (ссылка может гнить, поэтому я буду дублировать информацию здесь)

Одним из скрытых драгоценных камней в Xcode 4.2 является функция «Exception Breakpoint». Как только вы включите его, ваша жизнь отладки станет намного проще, потому что всякий раз, когда в ваше приложение выдается исключение, Xcode будет вызывать строку кода, которая вызвала возникновение исключения. Это особенно полезно, если ваше окно стека вызовов пустое (что я видел, иногда случалось при работе с приложениями для iOS). Вместо того чтобы полагаться на короткое сообщение об ошибке на панели «Вывод», которое содержит не намного больше, чем тип исключения и его сообщение об ошибке, вы точно знаете, в чем проблема!

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

После нажатия на пункт меню «Добавить точку прерывания исключения…», вы увидите этот вид конфигурации точки останова открытым:

Нажмите кнопку «Готово», и в списке точек останова появится новая точка прерывания исключения. Если вы хотите, чтобы во всех ваших рабочих пространствах XCode была точка прерывания исключения, щелкните ее правой кнопкой мыши (Ctrl + щелчок) и откройте пункт меню «Переместить точку останова в»:

После нажатия «Пользователь» в подменю вы увидите, что точка прерывания исключения находится в группе точек останова пользователя. Откройте другой проект, и он автоматически будет включен в список точек останова.

Счастливая отладка!

5 голосов
/ 30 ноября 2011

Просто попробуйте следующие шаги, которые сработали для меня.

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

К сожалению, это снова вернулось в main.m в редакторе :) Теперь вам нужно выполнить следующие шаги

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

Это должно работать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...