Приложение Objective-C для iPhone EXC_BREAKPOINT (SIGTRAP) - PullRequest
7 голосов
/ 03 марта 2010

Я недавно выпустил приложение около месяца назад, оно было тщательно протестировано мной, моим партнером и бета-тестерами. Недавно пользователь связался со мной по поводу того, что приложение даже не может открыться (вылетает после запуска экрана), у них установлена ​​правильная ОС, и они попытались переустановить.

Я попросил журнал аварий, и мне его прислали ...

Exception Type:  EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x00000001, 0xe7ffdefe
Crashed Thread:  0

Thread 0 Crashed:
0   dyld                           0x2fe01060 0x2fe00000 + 4192
1   dyld                           0x2fe088d4 0x2fe00000 + 35028
2   dyld                           0x2fe0196c 0x2fe00000 + 6508
3   dyld                           0x2fe01048 0x2fe00000 + 4168

Thread 0 crashed with ARM Thread State:
    r0: 0x2fe23ca0    r1: 0x00000000      r2: 0x2fe23ca0      r3: 0x00000000
    r4: 0x2ffff4e0    r5: 0x2ffff4bc      r6: 0x2fe005c0      r7: 0x2ffffb00
    r8: 0x00000004    r9: 0x2fe57cf0     r10: 0x2fe236c8     r11: 0x00000009
    ip: 0x0000018d    sp: 0x2ffff5b8      lr: 0x2fe088dc      pc: 0x2fe01060
  cpsr: 0x00000010

Binary Images:
0x2fe00000 - 0x2fe22fff  dyld ??? (???) <f6a50d5f57a676b54276d0ecef46d5f0> /usr/lib/dyld

Кажется, я не могу найти проблему в своем приложении, какие проблемы вызывают EXC_BREAKPOINT (SIGTRAP)? Я предполагаю, что ошибка находится внутри моего AppDelegate, так как он падает сразу после начального экрана.

Ответы [ 4 ]

4 голосов
/ 30 марта 2011

Я тоже получил эту ошибку и исправил ее. Этот человек, скорее всего, работает под управлением OS3, и вы используете блок кода из OS4, вам нужно установить слабое соединение с библиотекой, чтобы она могла правильно загружаться. в настройках вашей сборки для LLVM -weak_library /usr/lib/libSystem.B.dylib

также обсуждается здесь Приложение iOS 4 вылетает при запуске на iOS 3.1.3: символ не найден: __NSConcreteStackBlock

1 голос
/ 03 марта 2010

Это довольно странная трассировка стека.Это сбой в dyld (загрузчик динамической библиотеки).Это говорит о том, что у него возникают проблемы при загрузке динамической библиотеки или Framework, что означает, что она загружается с системным кодом (поскольку на стандартном iphone не может быть динамической библиотеки 3-го участника).Обратите внимание, что в разделе «Двоичные изображения» ваш код еще даже не загружен (или остальная часть дампа была усечена)?Вы делаете ручную загрузку динамических библиотек (dlopen() или тому подобное)?Даже если бы вы были, вы бы ожидали, что main() окажется в стеке, если ваша программа действительно загрузится ....

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

Мой следующий вопрос будет, является ли это iPhone с джейлбрейком.Я бы попросил пользователя перезагрузить iPhone, если он еще этого не сделал.Я бы даже соблазнился попросить их сделать восстановление ОС, но это всегда неловко просить клиента сделать.

0 голосов
/ 11 марта 2011

Существует общее правило с журналами аварий: если обратная трассировка бесполезна, посмотрите на вывод журнала консоли.

В этом случае, вероятно, происходит то, что вы используете вещи, которых нет в старой версии ОС. Когда dyld (динамический загрузчик) пытается разрешить символы во время загрузки, он не может найти некоторые из них, и символ или библиотека не имеют слабой связи. В журнале консоли должно быть указано, какой символ / библиотека не удалось загрузить.

В общем случае вы можете просто изменить структуру с «Обязательный» на «Слабый».

0 голосов
/ 03 марта 2010

Попробуйте эти шаги из Технической заметки Apple по чтению аварийных файлов . Он объясняет, как превратить шестнадцатеричный код в символы (имена классов, имена методов, имена переменных и т. Д.) Из вашего приложения.

Signal.h содержит список ошибок, таких как SIGTRAP, который определяется как:

#define SIGTRAP 5   /* trace trap (not reset when caught) */
...