Подтвердить что ты не робот

Как узнать, какое исключение было отправлено в отладчике Xcode (для iPhone)?

Я изучаю программирование iPhone от Эрики Садун. Поваренная книга разработчиков iPhone. Когда я запускаю приложение, которое я создал, выполнив шаги в примере преобразования температуры, начиная с 81 на симуляторе, он завершается из-за неперехваченного исключения. (См. http://groups.google.com/group/iphonesdk/browse_frm/thread/6f44a90fdb8da28a?hl=en для вопроса, который я отправил в группу iPhoneSDK Google.)

Исключение возникает после вызова UIApplicationMain() из моего main(). Если я просмотрю трассировку стека в отладчике, все, что я вижу, это (конечно) сборка. Как узнать, какое исключение было выбрано?

Обновление:
Изучить детали исключения из Консоли Debugger было достаточно, чтобы помочь мне решить проблему. (См. http://groups.google.com/group/iphonesdk/browse_frm/thread/6f44a90fdb8da28a?hl=en.) Я проверил, что могу установить символическую точку останова на objc_exception_throw, но я не смотрел, обратная трасса оттуда была бы полезной.

4b9b3361

Ответ 1

Поместите точку останова в objc_exception_throw и запустите приложение через Debug вместо Run

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

Ответ 2

В новом Xcode (по крайней мере, начиная с версии 4.5) вы можете легко поймать все исключения, выполнив следующее:

  • Настроить навигатор точек останова (⌘6)
  • Нажмите + в левом нижнем углу
  • Добавить точку останова исключений

Я думаю, что выше это то же самое, что и точка останова на objc_exception_throw. http://samwize.com/2012/09/26/xcode-4-dot-5-tips-and-tricks/

Ответ 3

http://ijoshsmith.com/2011/11/28/debugging-exceptions-in-xcode-4-2/

То же самое, что и решение samewize, но также показывает, как заставить эту точку останова отображаться по умолчанию во всех ваших проектах (щелкните правой кнопкой мыши на точке останова, Move Breakpoint To, User).

Ответ 4

Как ответил Кевин, вы найдете более полезную информацию для отладки, установив точку останова в objc_exception_throw.

Если вы используете Xcode 4.2, вы можете добавить эту символическую точку останова, перейдя в Breakpoint Navigator > Нажмите на значок добавления в левом нижнем углу > Добавить символическую точку остановa > Введите objc_exception_throw для символa > Готово.