Как узнать, какое исключение было отправлено в отладчике 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
, но я не смотрел, обратная трасса оттуда была бы полезной.
Ответы
Ответ 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 > Готово.