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

Предотвращение "Выполнение было прервано, причина: внутренняя точка останова исключения ObjC (-3)" на lldb

Я написал код, который сбрасывает все ivars класса в словарь в Objective C. Это использует valueForKey: для получения данных из класса. Иногда KVC генерирует внутреннее исключение, которое также фиксируется должным образом, но это нарушает lldb-функцию, и все, что я получаю, это:

Ошибка: выполнение прервано, причина: внутренняя точка останова исключения ObjC (-3). Процесс был возвращен в состояние до оценки выражения.

Нет контрольных точек. Я даже пытался с -itrue -ufalse как варианты выражения, но это не имеет никакого значения. Это полностью побеждает, за что я хочу использовать lldb, и это похоже на такую ​​крошечную проблему. Как я могу заставить clang просто игнорировать, если во время вызова метода есть внутренние, захваченные исключения ObjC?

Я пробовал это как внутри Xcode, так и напрямую через вызов clang с терминала и подключение к удаленному серверу отладки - без разницы.

4b9b3361

Ответ 1

Я столкнулся с той же проблемой. Мое решение состояло в том, чтобы обернуть вокруг него try/catch (я использую этот код только для отладки). Смотрите: DALIntrospection.m строка # 848

NSDictionary *DALPropertyNamesAndValuesMemoryAddressesForObject(NSObject *instance)

Или, если вы работаете на iOS 7, метод частного экземпляра _ivarDescription будет печатать все ivars для вас (аналогичные методы экземпляра _methodDescription и _shortMethodDescription).

Ответ 2

Я встретил ту же проблему.

Мое решение - это просто alloc init свойство, прежде чем назначить его значению, вызвавшему сбой.

Ответ 3

Сегодня и наши сотрудники столкнулись с этим, и в итоге мы нашли обходное решение с использованием lldb python API. Ручным способом является запуск script и ввод:

options = lldb.SBExpressionOptions()
options.SetTrapExceptions(False)
print lldb.frame.EvaluateExpression('ThisThrowsAndCatches()', options).value

Это может быть упаковано в собственную команду через command script add.