iPhone: понимание отчетов о сбоях в работе: нераспознанный селектор? - PullRequest
3 голосов
/ 05 мая 2010

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

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

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... */

Ответы [ 2 ]

2 голосов
/ 05 мая 2010

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

2 голосов
/ 05 мая 2010

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...