Как получить информацию о исключениях в XCode 4.6?
Я использовал информацию о исключениях из приложений, запущенных в симуляторе, например:
po $eax
С тех пор как я обновился до XCode 4.6, он перестал работать; Я всегда получаю эту ошибку:
error: warning: couldn't get object pointer (substituting NULL):
Couldn't find '_cmd' with appropriate type in scope
Couldn't materialize struct: Couldn't read eax (materialize)
Errored out in Execute, couldn't PrepareToExecuteJITExpression
Я видел, как люди рекомендуют использовать это:
register read eax
Но это дает мне эту ошибку:
eax = error: unavailable
Как получить детали исключения в XCode 4.6?
Ответы
Ответ 1
Если вы нарушаете objc_exception_throw
, выбранный стек стека является последним фреймом в вашем коде, перед вызовом каких-либо библиотек, которые могли бы вызвать исключение. В этот момент lldb не позволяет вам получить доступ к некоторым регистрам (см. этот ответ для возможного объяснения.
Чтобы получить сведения об исключении, вам нужно выбрать фрейм фрейма objc_exception_throw
:
Теперь po $eax
(po $rax
, если вы работаете на OS X 64 бит, po $r0
на iPhone/iPad, po $x0
на arm64) должны предоставить вам сведения об исключении.
Ответ 2
Мне нечего добавить, просто используйте этот удивительный справочник, который поможет вам установить контрольную точку исключения с действием (script), который выводит описание исключения в консоли.
Ответ 3
Перейдите к:
Product -> Scheme -> Edit Scheme -> Run on the left -> diagnostics tab
а затем включите зомби