0

我需要检测我的应用程序在哪里崩溃,我尝试逐行调试,但突然间,调试器从“汇编代码”(这是正确的名称吗?)跳转到崩溃中,所以我不能告诉你究竟是什么有问题的代码是。当崩溃发生时,我正在向 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
4

1 回答 1

2

您需要在objc_exception_throw. Xcode 有一些 UI 细节来设置它,但是在不挖掘屏幕截图的情况下解释它的最简单方法是在调试器控制台中输入命令(在发生崩溃之前):

b objc_exception_throw

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

例外本身也具有启发性。您正在将消息发送lengthNSNull. 我敢打赌,你有一个对象集合,你认为它们都NSString在某个地方,但是你偶尔会NSNull在那个集合中出现 s。我已经在 iOS 客户端代码中看到了这种情况,该代码使用来自各种 Web 服务的 JSON 结果——例如,当后端没有提供客户端期望的所有信息时。

更新:在 XCode 中单击设置 b objc_exception_throw: Debug > Breakpoints > Create Exception Breakpoint

于 2017-04-25T16:07:17.400 回答