#xcode #ios #gdb #debugging #stack-trace
#xcode #iOS #gdb #отладка #трассировка стека
Вопрос:
пожалуйста, простите полного новичка здесь — я запускаю приложение в симуляторе, и иногда, когда оно выходит из строя, оно публикует полезную информацию в консоли, в других случаях абсолютно ничего. Когда он ничего не публикует, какие шаги следует предпринять, чтобы начать отслеживать причину сбоя?
Ответ №1:
Прежде всего, откройте отладчик после сбоя и посмотрите на stacktrace.
В дополнение к этому вы могли бы включить NSZombieEnabled для исполняемого файла, когда появляются эти неопределенные ошибки неправильного доступа.
Отладчик с stacktrace (верхнее левое окно), XCode3
Stacktrace Xcode4
Комментарии:
1. NSZombieEnabled — это здорово. Это действительно может спасти вас от некоторых из этих случайных необъяснимых сбоев.
Ответ №2:
Я могу постоянно воспроизводить такое поведение с нашим приложением. Он использует ARC, поэтому я уверен, что ничего не выйдет, и у нас включены zombies. Xcode сообщит «Приостановлено» вместо отображения списка потоков, кнопка «Продолжить» активна, но ничего не делает, а при вводе bt в приглашении (gdb) указано, что нет стека.
Это сводит меня с ума!
Ответ №3:
Определите, при каком событии происходит сбой приложения. Например, если приложение выходит из строя при нажатии кнопки UIButton, вы можете установить точку останова для действия и пошагово просмотреть строки кода, чтобы увидеть, на какой строке происходит сбой. Иногда, когда нет журнала сбоев при сбое приложения, отладка с помощью этого метода оказывается полезной.
Я полагаю, что это проблема с памятью.
Комментарии:
1. Я уверен, что это проблема с памятью / потоками, но у нас слишком много кода, чтобы ставить точки останова. Есть какой -нибудь другой способ, пожалуйста?
2. @Maciej Swic: Та же проблема со мной, приятель. Мое приложение вылетает примерно через 5 строк журналов предупреждений памяти с уровнями 1 и 2: (Пожалуйста, любым другим способом?
Ответ №4:
иногда это случается и со мной.. приложение вылетает без какого-либо сообщения об ошибке, опубликованного в журналах.. в 95% случаев это происходит из-за того, что я бы что-то не выпускал или бы что-то выпускал и обращался к нему (что обычно создает журнал)… просмотрите свой код и посмотрите, правильно ли вы выпускаете и используете ли опцию автоматического выпуска, где это необходимо…