如何调试:libc++abi.dylib:以 NSException 类型的未捕获异常终止?
Posted
技术标签:
【中文标题】如何调试:libc++abi.dylib:以 NSException 类型的未捕获异常终止?【英文标题】:How do I debug: libc++abi.dylib: terminating with uncaught exception of type NSException? 【发布时间】:2016-11-04 15:20:21 【问题描述】:很抱歉问了这个菜鸟问题,我知道这个问题已经被问过数千次了,我知道是因为我以前遇到过这个问题数千次。但这一次谷歌没有帮助。
错误/终端打印:
libc++abi.dylib: terminating with uncaught exception of type NSException
我通常知道是什么类型的情况导致了这种情况,因为我过去遇到过这个问题并且修复起来非常简单,通常是函数名称错误或某些 UI 元素与我的代码之间的链接断开,但现在我有不知道是什么原因造成的。
我已经尝试过的:
我在起始 ViewController 上添加了大量断点,它通过所有 @IBOutlets 没有引发任何问题。我在 AppDelegate 的所有方法中都添加了断点,它不会在任何地方中断。代码在到达任何 viewDidLoad() 方法之前就崩溃了。我已经清理了我的项目,重新启动了 XCode 一千次,甚至破坏并重新制作了 UI 和代码之间的每个链接。重命名然后重新分配每个 @IBAction。
在这一点上,我什至不知道我没有尝试过什么。每个***帖子总是关于“检查损坏的链接等”,但这不再有帮助了。我不记得我改变了什么,因为在我开始出现这个错误之前我改变了很多小东西。我试着把所有东西都放回去,但这似乎没有帮助。
应用崩溃时:
在“applicationDidBecomeActve()”完成后,调试器进入一堆机器代码,然后应用程序崩溃,我得到了这个:
正确链接的证明:
[删除不必要的图片]
我的主要问题:
如果链接不是这里的问题,那还能是什么?
关于 NSLogs/堆栈跟踪
我很想提供某种 NSLog 或堆栈跟踪,因为我看到人们在其他问题上提出并给予,但我不知道如何。我在互联网上找不到任何不是石器时代关于如何打开它们的东西。其他一切都只是如何使用调试器,但我正在使用调试器,我得到的只是在查看机器指令之前对我的代码的简要一瞥,直到它最终崩溃。
编辑:
显然我只能在模拟器而不是物理设备上运行时获取日志。以下是我在模拟器上运行时得到的日志:
objc[40258]: Class PLBuildVersion is implemented in both /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/PrivateFrameworks/AssetsLibraryServices.framework/AssetsLibraryServices (0x123242998) and /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/PrivateFrameworks/PhotoLibraryServices.framework/PhotoLibraryServices (0x123067d38). One of the two will be used. Which one is undefined.
2016-11-04 16:26:47.463 KotConnect[40258:1345011] Unknown class ProgressViewContainer in Interface Builder file.
2016-11-04 16:26:47.500 KotConnect[40258:1345011] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIView 0x7fbfe3c0a030> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key loadingView.'
*** First throw call stack:
(
0 CoreFoundation 0x00000001105ca34b __exceptionPreprocess + 171
1 libobjc.A.dylib 0x000000011002b21e objc_exception_throw + 48
2 CoreFoundation 0x00000001105ca299 -[NSException raise] + 9
3 Foundation 0x000000010fb3b26f -[NSObject(NSKeyValueCoding) setValue:forKey:] + 291
4 UIKit 0x0000000110e0580d -[UIView(CALayerDelegate) setValue:forKey:] + 173
5 UIKit 0x000000011114f79e -[UIRuntimeOutletConnection connect] + 109
6 CoreFoundation 0x000000011056f590 -[NSArray makeObjectsPerformSelector:] + 256
7 UIKit 0x000000011114e122 -[UINib instantiateWithOwner:options:] + 1867
8 UIKit 0x0000000110ee1c21 -[UIViewController _loadViewFromNibNamed:bundle:] + 386
9 UIKit 0x0000000110ee2543 -[UIViewController loadView] + 177
10 UIKit 0x0000000110ee2878 -[UIViewController loadViewIfRequired] + 201
11 UIKit 0x0000000110f2307b -[UINavigationController _layoutViewController:] + 55
12 UIKit 0x0000000110f23963 -[UINavigationController _updateScrollViewFromViewController:toViewController:] + 471
13 UIKit 0x0000000110f23ada -[UINavigationController _startTransition:fromViewController:toViewController:] + 133
14 UIKit 0x0000000110f24ce5 -[UINavigationController _startDeferredTransitionIfNeeded:] + 874
15 UIKit 0x0000000110f25dc7 -[UINavigationController __viewWillLayoutSubviews] + 58
16 UIKit 0x000000011111cd6f -[UILayoutContainerView layoutSubviews] + 223
17 UIKit 0x0000000110e05f50 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 1237
18 QuartzCore 0x0000000110ac3cc4 -[CALayer layoutSublayers] + 146
19 QuartzCore 0x0000000110ab7788 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 366
20 QuartzCore 0x0000000110ab7606 _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 24
21 QuartzCore 0x0000000110a45680 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 280
22 QuartzCore 0x0000000110a72767 _ZN2CA11Transaction6commitEv + 475
23 QuartzCore 0x0000000110a730d7 _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 113
24 CoreFoundation 0x000000011056ee17 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23
25 CoreFoundation 0x000000011056ed87 __CFRunLoopDoObservers + 391
26 CoreFoundation 0x00000001105534b6 CFRunLoopRunSpecific + 454
27 UIKit 0x0000000110d3b7e6 -[UIApplication _run] + 434
28 UIKit 0x0000000110d41964 UIApplicationMain + 159
29 KotConnect 0x000000010d52cc8f main + 111
30 libdyld.dylib 0x00000001135c968d start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb)
【问题讨论】:
您的应用崩溃时能否发布您的应用日志? 在终于找到如何获取日志之后,我设法弄清楚了它是什么。显然我的自定义类没有被分配正确的模块。我在这里找到了解决方法:***.com/questions/24924966/… 那么恭喜! 我忘了感谢您将日志称为“应用程序日志”。在我用谷歌搜索“app logs swift”之后,我能够弄清楚如何让日志出现。如果没有你的快速评论,我可能仍然会玩弄我的拇指。那谢谢啦! :D 你是如何让日志出现的?我只有“以 NSException 类型的未捕获异常终止” 【参考方案1】:斯威夫特
只需添加
NSSetUncaughtExceptionHandler exception in
print(exception)
print(exception.callStackSymbols)
在 AppDelegate 的 didFinishLaunchingWithOptions 方法的底部。它将为您提供有关发生的异常的更好信息。 快乐编码!
【讨论】:
这需要被投票一百万次,直到它成为第一个谷歌结果。为什么这不是 default 未捕获的异常处理程序,我不知道,但它现在在我所有的项目中。 这比类似问题中最受好评的答案要好得多。你应该在那里回答并获得支持。 如果由我决定,我会给你小说奖!! 被严重低估的答案。 无法在 AppDelegate 中使用这个,但使用了类似的***.com/a/44779246/551744【参考方案2】:一旦我能够看到我的应用程序日志,我就会发现我的自定义类没有被发现。我会将针对此问题找到的修复程序留给将来遇到此问题的任何人:
Xcode 6 Strange Bug: Unknown class in Interface Builder file
【讨论】:
【参考方案3】:当我不小心从我的目标中删除了我的一个故事板时,这发生在我身上。请务必仔细检查您的 Target Membership。
【讨论】:
以上是关于如何调试:libc++abi.dylib:以 NSException 类型的未捕获异常终止?的主要内容,如果未能解决你的问题,请参考以下文章
Swift 2 到 3 迁移错误(libc++abi.dylib:以 NSException 类型的未捕获异常终止)
UITableViewDataSource 导致 libc++abi.dylib:以 NSException 类型的未捕获异常终止
libc++abi.dylib:以 NSException (lldb) 类型的未捕获异常终止 TabBarController->TableViews->ViewControllers
(Swift 3) 父子上下文崩溃核心数据 (libc++abi.dylib: 以 NSException (Recorded Frame) 类型的未捕获异常终止)
libc++abi.dylib: terminate_handler 意外抛出异常 - 0 堆栈跟踪 iOS7 / iOS 8
libc++abi.dylib: terminate_handler unexpectedly threw an exception错误小结