Сбой iPhone с отсутствием обратного следа - PullRequest
3 голосов
/ 11 июля 2010

Приложение для iPhone недавно было отклонено из магазина приложений "из-за его сбоя при запуске".Однако я не могу воспроизвести этот сбой.Приложение отлично работает как на симуляторе, так и на устройстве с тем же аппаратным и программным обеспечением, на котором его тестировала Apple (iPhone 3.1 под управлением iOS 4).Присылаемые мне журналы аварийных сбоев говорят: «Обратного следа нет», поэтому мне некуда заглядывать в мой код.Вот пример:

Incident Identifier: [...]
CrashReporter Key:   [...]
Hardware Model:      iPhone3,1
Process:         [MyApp] [1172]
Path:            /var/mobile/Applications/[...]-3F1B-4504-A572-[...]/[MyApp].app/[MyApp]
Identifier:      [MyApp]
Version:         ??? (???)
Code Type:       ARM (Native)
Parent Process:  launchd [1]

Date/Time:       2010-07-08 [...]
OS Version:      iPhone OS 4.0 (8A293)
Report Version:  104

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0xfe42c648
Highlighted Thread:  0

Backtrace not available

Unknown thread crashed with ARM Thread State:
    r0: 0x00002388    r1: 0x00000000      r2: 0x3e2b47c8      r3: 0x00000108
    r4: 0x2fe00000    r5: 0x00000000      r6: 0x00000000      r7: 0x00000000
    r8: 0x2ffffb48    r9: 0x2fffecfc     r10: 0x00000000     r11: 0x00000000
    ip: 0x00000010    sp: 0x2ffffb4c      lr: 0x2fe08907      pc: 0xfe42c648
  cpsr: 0x40000010

Binary Images:
    0x1000 -    0x78fff +[MyApp] armv7  <23af3d265c3086eaceb51cc649eb794f> /var/mobile/Applications/[...]-3F1B-4504-A572-[...]/[MyApp].app/[MyApp]
0x2fe00000 - 0x2fe26fff  dyld armv7  <697ae459733a7f0b6c439b21ba62b110> /usr/lib/dyld
[many more libraries...]

Как мне начать отладку этого?Возможно ли, что это проблема сборки, а не ошибка кодирования?И можно ли извлечь какую-либо полезную информацию из разделов «Состояние потока ARM» или «Двоичные изображения» отчета о сбое?

Спасибо!

* обновление: * Я установил приложение дляпервый раз на другом iPhone под управлением iOS 4 и до сих пор не может воспроизвести сбой.Я начинаю думать, что это проблема с параметрами времени сборки, такими как библиотеки или целевые версии.Основываясь на отчете о сбое, вероятно, что какой-либо код моего приложения был выполнен?

Ответы [ 4 ]

1 голос
/ 14 декабря 2011

Вы можете сделать некоторую информацию из состояния потока ARM. Регистр ПК - единственный, содержащий неверный адрес, на который жалуется отчет о сбое. Это означает, что ваше приложение пыталось выполнить код по этому адресу.

SIGSEGV означает, что указанный адрес недействителен. В системе нет страниц памяти с этим адресом.

Я не думаю, что iOS позволит вам просто выполнить код с любого адреса, но возможно, что кадр стека был поврежден, а адрес возврата был недействительным при возврате функции. Это поддерживает проблему «обратная трассировка недоступна».

Загрязнение стека может быть результатом переполнения буфера. Если вы используете memcpy или цикл множеств в массиве локальных переменных и заполняете конец массива, вы можете уничтожить стек.

1 голос
/ 11 июля 2010

См. Техническое примечание TN2151: Понимание и анализ отчетов о сбоях приложений iPhone OS. Обычно символизация помогает вам отследить источник сбоя, но, поскольку нет обратной трассировки, она может не помочь в этом случае.

Не беспокойтесь о тестировании на симуляторе.Сборка симулятора и сборка устройства - это полностью отдельные компиляции для двух разных аппаратных компонентов.Просто потому, что он работает на симуляторе, ничего не говорит вам о сбое в устройстве.

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

Скорее всего, вам придется стереть тестовое устройство обратно по умолчанию, чтобы повторить тест, который делает Apple.Затем откройте все возможные приложения, прежде чем запускать собственное.

0 голосов
/ 09 августа 2010

Мне так и не удалось воспроизвести аварию. Я испортил несколько параметров сборки и отправил повторно, и это было одобрено.

0 голосов
/ 11 июля 2010

Segfault вряд ли будет ошибкой сборки.Чтобы воспроизвести эту проблему, попробуйте очистить любую сохраненную информацию на симуляторе iPhone перед запуском проекта;Возможно, вы предполагаете наличие определенных записей в NSUserDefaults, которые присутствуют на вашем собственном iPhone, но которые не будут доступны при установке по умолчанию.Если это не воспроизводит проблему, то вы должны создать модульные тесты для каждого из ваших компонентов, исключая каждый компонент за раз как причину сбоя.В конечном итоге вы исключите все причины отказа, за исключением истинной причины отказа.

...