您的位置:首页 > 编程语言

Xcode调试代码

2016-01-11 17:20 239 查看

Xcode调试代码

在使用Xcode的开发的过程中,难免遇到代码各种崩溃的问题,这里除了介绍的几种方法来调试以外,之前自己在开发中遇到问题,在StackOverflow上找到了答案

前几种方法可参照

英语原文:http://crushbeercrushcode.org/2012/11/four-tips-for-debugging-in-xcode-like-a-bro/

中文翻译:http://blog.csdn.net/joywii/article/details/19641931

下面是我遇上的问题

* Terminating app due to uncaught exception ‘NSInvalidArgumentException’, reason: ‘* setObjectForKey: object cannot be nil (key: title)’

* First throw call stack:

(0x18545e084 0x195a440e4 0x1853497b8 0x1000ce3b4 0x1000d41d4 0x189c14e68 0x189bfdfc0 0x189c14804 0x189c14490 0x189c0d9e4 0x189be11d4 0x189e7f98c 0x189bdf73c 0x185416324 0x1854155c8 0x185413678 0x185341664 0x18e4835a4 0x189c464f8 0x100134f00 0x1960b2a08)

libc++abi.dylib: terminating with uncaught exception of type NSException

看到这个问题的第一反应就是,肯定那个字典被设置了nil,再一细看就会发现,崩溃信息还打印出了key:@”title”. 第一反应就是全局搜索了一下,发现相同的太多了,也没有相关的上下文,怎么办?

于是我使用lldb下的 bt 来查看

(lldb) bt
* thread #1: tid = 0x558b, 0x00000001961cb270 libsystem_kernel.dylib`__pthread_kill + 8, queue = 'com.apple.main-thread', stop reason = signal SIGABRT
frame #0: 0x00000001961cb270 libsystem_kernel.dylib`__pthread_kill + 8
frame #1: 0x0000000196269228 libsystem_pthread.dylib`pthread_kill + 112
frame #2: 0x0000000196142b18 libsystem_c.dylib`abort + 112
frame #3: 0x0000000195229418 libc++abi.dylib`abort_message + 116
frame #4: 0x0000000195248b8c libc++abi.dylib`default_terminate_handler() + 304
frame #5: 0x0000000195a443c0 libobjc.A.dylib`_objc_terminate() + 128
frame #6: 0x0000000195245bb4 libc++abi.dylib`std::__terminate(void (*)()) + 16
frame #7: 0x000000019524573c libc++abi.dylib`__cxa_rethrow + 144
frame #8: 0x0000000195a44294 libobjc.A.dylib`objc_exception_rethrow + 44
frame #9: 0x0000000185341714 CoreFoundation`CFRunLoopRunSpecific + 572
frame #10: 0x000000018e4835a4 GraphicsServices`GSEventRunModal + 168
frame #11: 0x0000000189c464f8 UIKit`UIApplicationMain + 1488
* frame #12: 0x0000000100134f00 XXApplication`main(argc=1, argv=0x000000016fd5fa58) + 124 at main.m:16
frame #13: 0x00000001960b2a08 libdyld.dylib`start +


但是这还是没有什么东西啊,继续向下看,不是还有那么多地址信息么。怎么去解析这些地址信息读出来? 在stackOverflow上找了这个

image lookup -a xxxx


然后直接在lldb试了试,咦,相关信息出来了。

(lldb) image lookup -a 0x1853497b8
Address: CoreFoundation[0x0000000181b917b8] (CoreFoundation.__TEXT.__text + 64232)
Summary: CoreFoundation`-[__NSDictionaryM setObject:forKey:] + 972
(lldb) image lookup -a 0x1000ce3b4
Address: XXApplication[0x000000010002e3b4] (XXApplication.__TEXT.__text + 167516)
Summary: XXApplication`-[kPlayerWrapperViewController setMessageToDevicePlayer] + 208 at kPlayerWrapperViewController.m:485


然后果断定位到代码行,发现原来是同事在此处操作的时候,没有判断数据的存在性导致的,至此,问题原因找到了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: