Как получить информацию о исключениях в 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:

Select the objc_exception_throw stack frame

Теперь 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 

а затем включите зомби