Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iPhone:了解现场崩溃报告:无法识别的选择器?_Iphone_Objective C_Debugging_Crash - Fatal编程技术网

iPhone:了解现场崩溃报告:无法识别的选择器?

iPhone:了解现场崩溃报告:无法识别的选择器?,iphone,objective-c,debugging,crash,Iphone,Objective C,Debugging,Crash,我的应用程序的一个用户在应用程序启动时出现了严重的崩溃问题。我让他从他的电脑上给我发送了.crash文件。在根据“符号化”它们之后,我从堆栈中看到了一个无法识别的选择器失败。但与我的流程相对应的代码的顶行是一个明确的消息发送,它在我的应用程序中被执行数百次而没有问题。不用说,我自己从来没有指责过这个问题 事故报告会撒谎吗?除了无法识别的选择器之外,这个堆栈还能指示什么吗?谢谢你的洞察力 Exception Type: EXC_CRASH (SIGABRT) Exception Codes: 0

我的应用程序的一个用户在应用程序启动时出现了严重的崩溃问题。我让他从他的电脑上给我发送了.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... */

symbolicate可能会失败,但可能性不大——如果它失败,您很可能根本看不到任何符号

崩溃日志坚持ImageLoader.m:180试图向对象发送无效消息。这可能是对的,即使情况很奇怪

我的建议是:让看到崩溃的人从Console.app向您发送NSException错误的副本。这将告诉您接收消息的对象的类和消息的选择器

可能性1:用户正在运行与您不同的操作系统版本,并且该选择器在其版本的操作系统上不存在。或者类似地,他的构建中的某个文件已过期,并且缺少选择器


可能性2:但是,您正在创建/获取的对象在用户的计算机上有不同的结果。e、 g.您总是会得到一个NSString,但用户会得到一个NSNumber。

“未识别的选择器”也可以表示“过度扩展的对象”。假设您有一个对象x,它被不正确地释放。该内存位置现在可供其他用途。假设它用于Y类的某些内容。现在,下次尝试发送消息x时,您将收到一条消息,说明Y类如何不响应选择器。

谢谢Matt。你能详细说明一下如何获取NSException信息吗?iPhone用户在他们的Console.app中从崩溃中得到东西了吗?--我自己找不到。仅供参考,我喜欢你的博客。对不起,我忽略了iPhone标签;不,您可能无法获取控制台信息(这是您只能为Mac应用程序执行的操作)。用户的手机运行的是哪个版本的操作系统?您是否正在尝试调用在更高版本中添加的API?操作系统版本在这里不是问题。谢谢。这个主意很有趣。谢谢你的想法。