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
然后果断定位到代码行,发现原来是同事在此处操作的时候,没有判断数据的存在性导致的,至此,问题原因找到了。
相关文章推荐
- python解析xml文件注意
- PHP 连接SQL2008实践
- 我写的一个 Qt 显示图片的控件
- zabbix2.2.2-hostgroups.php代码分析(1)
- Unicode Tips
- [系统与工程]系统指令-探测之星升级工程代码
- c# 关于获取exe路径
- Asp.Net TreeView 复选框选择
- 一个例子让你了解Java反射机制
- python数字图像处理(2):图像的读取、显示与保存
- 数据持久化方案(三)ContentProvider
- 使用Eclipse基于Maven的Spring MVC 调试心得(二)--- Spring配置
- 自学Python一 迷茫中的开端!
- Qt学习(17)
- Spring Mvc interceptor
- js用ajax和jison在不同页面的php和html之间互相传值的方法
- 使用google地图绘画轨迹
- 【JDK源码分析】String的存储区与不可变性
- php二分查找算法
- [151225] Python3 实现最大堆、堆排序,解决TopK问题