如何知道我的应用程序崩溃的位置,只有这个日志信息?

时间:2017-04-25 15:38:26

标签: ios objective-c debugging unrecognized-selector nsnull

我需要检测我的应用程序崩溃的位置,我尝试逐行调试,但突然,调试器从#34;汇编程序代码跳转到#34; (这是正确的名称?)进入崩溃,因此我无法准确地告诉您违规代码是什么。 当崩溃发生时,我正在对Speech进行文本操作并将我的应用程序记录到indigo中。 我怎样才能理解这个日志信息?:

TIMESTAMP Indigo[1675:621373] -[NSNull length]: unrecognized selector sent to instance 0x1a7c38ef8
TIMESTAMP Indigo[1675:621373] invalid mode 'kCFRunLoopCommonModes' provided to CFRunLoopRunSpecific - break on _CFRunLoopError_RunCalledWithInvalidMode to debug. This message will only appear once per execution.
TIMESTAMP Indigo[1675:621373] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSNull length]: unrecognized selector sent to instance 0x1a7c38ef8'
*** First throw call stack:
(0x181aeefd8 0x180550538 0x181af5ef4 0x181af2f4c 0x1819eed2c 0x181ad4ff4 0x181ad513c 0x187c28234 0x100162f8c 0x1001a2bd8 0x187f63114 0x187f6332c 0x187e1c6e0 0x187e18978 0x187e1834c 0x187dfcfbc 0x1001a55b0 0x100041da8 0x100041b8c 0x1000e7c4c 0x1820f81fc 0x18210fef8 0x1825bd804 0x182502760 0x1824f2b18 0x1825bfba0 0x1009bda10 0x1009c2b78 0x181a9d0c0 0x181a9acdc 0x1819cad94 0x183434074 0x187c83130 0x10002160c 0x1809d959c)
libc++abi.dylib: terminating with uncaught exception of type NSException

1 个答案:

答案 0 :(得分:2)

您需要在objc_exception_throw中设置断点。 Xcode有一些用于设置它的UI细节,但最简单的解释方法就是在调试器控制台中输入命令(在崩溃发生之前):

b objc_exception_throw

然后当抛出无法识别的选择器异常时,调试器将停止那里,而不是等待异常导致崩溃 - 在堆栈不太有用的情况下。

异常本身也很有启发性。您正在向length发送消息NSNull。我敢打赌你有一些你认为会在某处NSString的对象的集合,但你偶然会在该集合中出现NSNull。我已经看到这种情况发生在iOS客户端代码中,这些代码消耗来自各种Web服务的JSON结果 - 例如,当后端没有提供客户端所期望的所有信息时。

更新: 在XCode中以图形方式设置b objc_exception_throw单击: 调试>断点>创建异常断点