Являются ли исключения «EXC_BREAKPOINT (SIGTRAP)» причиной отладки точек останова?
Нет. На самом деле, наоборот: SIGTRAP (trap trap) заставит отладчик прерывать (прерывать) вашу программу, точно так же, как действительная точка останова. Но это потому, что отладчик всегда выходит из строя при сбое, а SIGTRAP (как и несколько других сигналов ) является одним из типов сбоя.
SIGTRAP, как правило, вызваны выбросом исключений NSE, но не всегда - даже можно напрямую поднять один самостоятельно.
Теперь я заметил, что забыл удалить некоторые точки останова отладки, включая _NSLockError, [повышение NSException] и objc_exception_throw.
Это не точки останова. Две из них являются функциями, а -[NSException raise]
является методом.
Вы имели в виду, что вы установили точки останова для этих функций и этого метода?
Я предполагаю, что использование конфигурации "Release" предотвращает установку любых точек останова -
номер
Конфигурации build конфигурации. Они влияют на то, как Xcode создает ваши приложения.
Точки останова не являются частью сборки; Вы устанавливаете их в отладчике. Они существуют, только получают удар и останавливают вашу программу, только когда вы запускаете ее под отладчиком.
Поскольку они не являются частью сборки, невозможно передать ваши точки останова пользователю, просто предоставив ему пакет приложений.
Я не уверен, как именно работают точки останова ...
Когда ваша программа достигает точки останова, отладчик прерывает (прерывает) вашу программу, после чего вы можете проверить состояние программы и осторожно шагнуть вперед, чтобы увидеть, как работает программа.
Поскольку отладчик останавливает вашу программу, точки останова не действуют, если вы не запускаете свою программу под отладчиком.
… или нужно ли запускать программу изнутри gdb, чтобы точки останова имели какой-либо эффект.
Да. Точки останова отладчика работают только внутри отладчика.
У меня такие вопросы: может ли то, что я оставил установленные контрольные точки, быть причиной сбоев, наблюдаемых пользователем?
номер
Во-первых, как уже отмечалось, даже если эти точки останова каким-то образом переносятся в систему пользователя, точки останова действуют только в отладчике. Отладчик не может остановиться на точке останова, если ваша программа не работает под отладчиком. Пользователь почти наверняка не запускает ваше приложение под отладчиком, тем более что он получил из него журнал сбоев.
Даже если они запустили ваше приложение под отладчиком с установленными всеми этими точками останова, точка останова срабатывает только тогда, когда ваша программа достигает этой точки, поэтому одна из этих точек останова может срабатывать, только если вы или Какао вызвали _NSLockError
, -[NSException raise]
или objc_exception_throw
. Достижение этой точки не было бы причиной проблемы, это было бы симптомом проблемы.
И если вы произвели сбой в результате вызова одного из вызываемых, в вашем журнале сбоя должен быть указан хотя бы один из них. Это не так.
Итак, это не было связано с вашими точками останова (другой компьютер, отладчик не задействован), и это не было исключением Какао - как я уже говорил, исключения Какао являются одной из причин SIGTRAP, но они не единственные. , Вы столкнулись с другим.
Если нет, у кого-нибудь еще были подобные проблемы с [NSFont fontWithName: size:]?
Мы никак не можем сказать, похожи ли какие-либо проблемы, которые у нас были, потому что вы отключили журнал аварий. Мы ничего не знаем о том, в каком контексте произошла авария.
Единственное, что хорошо вырезать, это раздел «Двоичные изображения», поскольку у нас нет ваших пакетов dSYM, а это значит, что мы не можем использовать этот раздел для обозначения журнала сбоев.
Вы, наС другой стороны, может. Я написал приложение для этой цели; введите в него журнал сбоев, и он должен автоматически обнаруживать пакет dSYM (вы сохраняете пакет dSYM для каждой сборки выпуска, которую вы распространяете, верно?) и восстанавливать имена ваших функций и методов в трассировке стека, где бы ни появлялись ваши функции и методы.
Для получения дополнительной информации см. Руководство по отладке Xcode .