仅使用此日志信息,如何知道我的应用程序在哪里崩溃?
How to know where is my app crashing, only with this log info?
我需要检测我的应用程序在哪里崩溃,我试着逐行调试,但突然,调试器从 "assembler code"(这是正确的名称吗?)跳到崩溃,所以我可以' 准确地告诉您有问题的代码是什么。
当崩溃发生时,我正在将文本转换为语音并将我的应用程序登录到 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
您需要在objc_exception_throw
中设置断点。 Xcode 有一些 UI 的设置细节,但最简单的解释方法是在你的调试器控制台中输入命令(在崩溃发生之前):
b objc_exception_throw
然后当抛出无法识别的选择器异常时,调试器将停止那里,而不是等待异常导致崩溃,堆栈不太有用。
异常本身也很能说明问题。您正在向 NSNull
发送消息 length
。我敢打赌,您有一个对象集合,您认为这些对象在某处都是 NSString
,但您偶尔会在该集合中出现 NSNull
。我已经看到 iOS 客户端代码使用来自各种网络服务的 JSON 结果——当后端没有提供客户端期望的所有信息时。例如。
更新:
在 XCode 中以图形方式设置 b objc_exception_throw 单击:
调试 > 断点 > 创建异常断点
我需要检测我的应用程序在哪里崩溃,我试着逐行调试,但突然,调试器从 "assembler code"(这是正确的名称吗?)跳到崩溃,所以我可以' 准确地告诉您有问题的代码是什么。 当崩溃发生时,我正在将文本转换为语音并将我的应用程序登录到 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
您需要在objc_exception_throw
中设置断点。 Xcode 有一些 UI 的设置细节,但最简单的解释方法是在你的调试器控制台中输入命令(在崩溃发生之前):
b objc_exception_throw
然后当抛出无法识别的选择器异常时,调试器将停止那里,而不是等待异常导致崩溃,堆栈不太有用。
异常本身也很能说明问题。您正在向 NSNull
发送消息 length
。我敢打赌,您有一个对象集合,您认为这些对象在某处都是 NSString
,但您偶尔会在该集合中出现 NSNull
。我已经看到 iOS 客户端代码使用来自各种网络服务的 JSON 结果——当后端没有提供客户端期望的所有信息时。例如。
更新: 在 XCode 中以图形方式设置 b objc_exception_throw 单击: 调试 > 断点 > 创建异常断点