2010-05-05 4 views
3

Пользователь моего приложения в поле, похоже, имеет проблемы с сбоем при запуске приложения. Я заставил его отправить мне файлы .crash со своего ПК. После «символизации» их в соответствии с this article я получаю то, что выглядит из стека, как неудачный селектор. Но верхняя строка кода, соответствующая моему процессу, - это однозначная отправка сообщения, которая выполняется сотни раз без проблем в моем приложении. Излишне говорить, что я никогда не повторяю эту проблему сам.iPhone: понимание отчетов о сбоях в поле: непризнанный селектор?

Может ли отчет о сбое лгать? Может ли этот стек указать что-либо помимо непризнанного селектора? Спасибо за понимание.

Exception Type: EXC_CRASH (SIGABRT) 
Exception Codes: 0x00000000, 0x00000000 
Crashed Thread: 0 

Thread 0 Crashed: 
0 libSystem.B.dylib    0x000790a0 __kill + 8 
1 libSystem.B.dylib    0x00079090 kill + 4 
2 libSystem.B.dylib    0x00079082 raise + 10 
3 libSystem.B.dylib    0x0008d20a abort + 50 
4 libstdc++.6.dylib    0x00044a1c __gnu_cxx::__verbose_terminate_handler() + 376 
5 libobjc.A.dylib     0x000057c4 _objc_terminate + 104 
6 libstdc++.6.dylib    0x00042dee __cxxabiv1::__terminate(void (*)()) + 46 
7 libstdc++.6.dylib    0x00042e42 std::terminate() + 10 
8 libstdc++.6.dylib    0x00042f12 __cxa_throw + 78 
9 libobjc.A.dylib     0x000046a4 objc_exception_throw + 64 
10 CoreFoundation     0x00094174 -[NSObject doesNotRecognizeSelector:] + 108 
11 CoreFoundation     0x00093afa ___forwarding___ + 482 
12 CoreFoundation     0x000306c8 _CF_forwarding_prep_0 + 40 
13 MyAppProcess     0x000147c6 -[ImageLoader imageSmallForColor:style:] (ImageLoader.m:180) 
.... /* many more frames... */ 
+0

Какая версия ОС работает под управлением телефона? Вы пытаетесь вызвать API, который был добавлен в более позднюю версию? –

+0

Варианты ОС здесь не являются проблемой. Благодарю. –

ответ

2

«Нераспознанный селектор» также может означать «перевыпущенный объект». Предположим, у вас есть объект, x, и он освобождается неправильно. Это место памяти теперь бесплатно для другого использования. Предположим, что он привык к чему-то из класса Y. Теперь, в следующий раз, когда вы попытаетесь передать сообщение x, вы получите сообщение о том, как класс Y не отвечает на селектор.

+0

Интересная идея. Спасибо за эту мысль. –

2

Символ может терпеть неудачу, но это маловероятно - вы, скорее всего, не увидите никаких символов, если это не удастся.

Журнал сбоев настаивает на том, что ImageLoader.m: 180 пытается отправить недопустимое сообщение объекту. Вероятно, это правильно, даже если обстоятельства причудливы.

Мое предложение: получите человека, который видит сбой, чтобы отправить вам копию ошибки NSException с Console.app. Это скажет вам класс объекта, который получил сообщение и селектор сообщения.

Возможность 1: пользователь запускает для вас другую версию ОС, а селектор не существует в его версии ОС. Или аналогично, что файл в его сборке устарел и отсутствует селектор.

Возможность 2: однако вы создаете/выбираете объект на разных компьютерах с различными результатами. например Вы всегда получаете NSString, но пользователь получает NSNumber.

+0

Спасибо Мэтт. Можете ли вы рассказать о получении информации NSException? Пользователи iPhone получают вещи в своих Console.app из-за сбоев? - Я не могу найти его сам. FYI, любите свой блог. –

+0

Извините, я не заметил тег iPhone; нет, вы, вероятно, не можете получить информацию о консоли (это то, что вы можете сделать только для Mac-приложения). –

Смежные вопросы