Как отладить сбой, который произошел, когда вернуться из фона - PullRequest
5 голосов
/ 04 июля 2019

При возврате из фона через значок приложения происходит сбой.

Однако я не вижу никакой подробной информации в журнале консоли. Есть сигнал для завершения, но мы не можем найти номер сигнала.

<FBApplicationProcess: 0x117bcb930; Maixxxx; pid: 1762> exited abnormally via signal.

Process exited: <FBApplicationProcess: 0x117bcb930; Maixxx; pid: -1> -> <FBApplicationProcessExitContext: 0x17103f820; exitReason: signal; terminationReason: (none)>

console log

Процедуры для воспроизведения моего сбоя следующие:

  1. Запустите приложение, щелкнув значок приложения.
  2. Используйте приложение как обычный пользователь.
  3. Нажмите home, чтобы поместить его в фоновый режим.
  4. Подождите несколько минут.
  5. Нажмите значок приложения на экране трамплина, чтобы использовать его снова.
  6. Сбой приложения и выход.

Поскольку сбой происходит только при возврате из фона, и требуется ввести фон в течение нескольких минут, я не могу работать в режиме отладки с подключенным lldb.

Я не использовал никаких фоновых функций.

Кроме того, я не видел ни одного сообщения о сбое в Fabric Crashlytics. Поэтому я думаю, что обработчик сигнала не может быть вызван ни один?

Как исследовать проблему такого рода?

Ответы [ 5 ]

3 голосов
/ 08 июля 2019

Эти вещи могут быть жесткими, я знаю это из аналогичного опыта. Не зная больше о вашем приложении, я могу только предложить подсказки и не дать однозначного ответа, но, возможно, это поможет вам.

Резервный и утомительный подход к использованию прямой регистрации с print и т. Д., Несмотря на два способа попытаться «поймать» процесс.

Однако сначала позвольте мне подчеркнуть, что «фон» не всегда одинаков, и люди, к сожалению, часто используют этот термин свободно. В зависимости от того, какое изменение состояния вызывает ваш сбой, вам может не повезти, и вам придется просто экспериментировать, используя ручную регистрацию. Приложения могут быть в фоновом режиме, то есть не на переднем плане, но все еще запущены. Обычно это тот случай, когда отладчик подключен, иначе он не сможет выполнить свою работу. В качестве альтернативы они могут быть приостановлены (или даже прекращены) ОС. Отладчик предотвращает это, что вы, вероятно, уже поняли.

Вам могут помочь две вещи:

  1. Если вы используете фоновую выборку, то есть «возвращение из фонового режима», как вы описываете, это происходит автоматически, вы можете активировать опцию «Запуск из-за события фоновой выборки» в конфигурации «Выполнить» вашей схемы сборки. раздел.

  2. Запустите приложение с главного экрана, поместите его в фоновом режиме с помощью кнопки «Домой» и немного подождите (вы, вероятно, уже делали это в прошлом, чтобы понять, когда произойдет сбой). Ваше приложение должно в конечном итоге перейти в приостановленное состояние (но у вас нет никакого способа фактически увидеть это где-нибудь AFAIK). Вместо того, чтобы снова выводить его на передний план через многозадачный пользовательский интерфейс, просто снова подключите отладчик через меню «Отладка - Присоединить к процессу». Это должно привести ваше приложение из приостановленного состояния обратно в фоновое состояние, где, вероятно, происходит сбой действительно (если бы это произошло при переходе с фона на передний план, вы, вероятно, смогли бы отладить его как обычно ). Надеюсь, отладчик вовремя подключился к нему, иначе у меня нет идей. (

Лично я не сталкивался с этой конкретной проблемой лично, но я знаю, что фоновые вещи могут быть хитрыми. Может быть, эта дискуссия также поможет вам (я тоже взял оттуда свою информацию).

0 голосов
/ 12 июля 2019

Журналы сбоев по-прежнему доступны на вашем тестовом устройстве.

Чтобы получить журнал сбоев, выполните следующие действия:

  • Подключите тестовое устройство к Mac через USB.
  • Запустить Xcode.Перейдите в Windows> Устройства и симуляторы.
  • Выберите свое устройство в разделе устройств в левой части экрана.
  • Нажмите кнопку Просмотр журналов устройств.
  • Определите и выберитеЖурнал аварии, чтобы увидеть содержимое.
0 голосов
/ 12 июля 2019

Я прошел все вышеупомянутые ответы, и все дали правильные ответы.Однако я хотел бы поделиться своей точкой зрения.

  1. Если приложение работает на любом реальном устройстве iOS с режимом отладки и подключаемым модулем или даже на Simulator, приложение никогда не будетидти в фоновом режиме.

  2. Если приложение работает без подключаемого модуля или работает без Xcode (непосредственно запустить приложение на iPhone), а затем поместить приложение в фоновом режиме, оно будет запущено вфон из следующих 3 минут.Через 3 минуты приложение будет автоматически приостановлено и удалено из основного потока.Теперь, когда мы снова откроем приложение, оно будет считаться новым запуском.

  3. Если ваше приложение имеет какие-либо фоновые возможности, то оно будет работать даже в фоновом режиме, ноВы не можете делать какие-либо изменения пользовательского интерфейса в течение этого времени.

  4. Чтобы приложение работало в фоновом режиме, фоновые возможности должны обрабатываться правильно.то есть.Если Location используется в вашем приложении с условием «Пока приложение находится на переднем плане», приложение будет работать не более 3 минут в фоновом режиме.Поэтому, если вы хотите, чтобы ваше приложение работало в фоновом режиме, вы должны указать правильную причину в файле Info.plist с помощью слова «разряд батареи», иначе Apple отклонит его.

  5. Пинг мне для более подробной информации по вашему вопросу.

Спасибо.

0 голосов
/ 12 июля 2019

Вы не можете отлаживать это на реальном устройстве. Когда отладчик подключен, ваши приложения никогда не перейдут в фоновый режим на реальном устройстве.

Вы можете попробовать отладить это на симуляторе. В любом случае, пожалуйста, проверьте атрибуты вашего класса и установите атрибуты strong, чтобы убедиться, что это не произошло из-за пропущенных атрибутов.

Я прочитал несколько вопросов StackOverflow, в которых есть FBApplicationProcess. Обычно это происходит из-за отсутствия массива или чего-то еще при запуске приложения.

С уважением.

0 голосов
/ 07 июля 2019

Запустите приложение в режиме отладки на реальном устройстве.Нажмите кнопку «Домой», чтобы отправить приложение в фоновый режим и продолжить отладку.Затем вы можете перевести приложение на передний план и продолжить отладку или установить точку останова на applicationWillEnterForeground.

...