调试xcode必备

iOS开发者必备:Xcode Instruments网络调试全攻略(真机调试避坑指南) 本文为iOS开发者提供了使用Xcode Instruments进行网络连接调试的完整指南,重点解决真机调试中的常见问题。文章详细介绍了Network模板的核心价值、环境搭建避坑步骤、界面操作详解,并通过实战场景演示如何定位图片加载慢、API不稳定及后台异常流量等典型网络性能瓶颈,帮助开发者高效优化应用网络体验。 阅读详情

昨天在写iOS代码的时候,调试的时候模拟器崩溃了。异常停在了如下整个main函数的入口处:

[html]  view plain copy
  1. int main(int argc, char *argv[])  
  2. {  
  3.     @autoreleasepool {  
  4.         // 异常停在了下面这行,毫无提示作用  
  5.         return UIApplicationMain(argc, argv, nil, NSStringFromClass([MyClass class]));  
  6.     }  
  7. }  

XCode的Console界面报出了一些出错信息, 如下图所示:

我根据Console里面的文字提示信息,猜出应该是出现了空指针nil的操作。但是具体出错在哪一行,却不知道。最终虽然找到了bug,但是debug的过程确实费了些时间。考虑到这个stace trace信息应该对我挺有帮助才对的,所以我就查了一下如何让这原本一堆16进制的调用栈信息更可读。于是在stackoverflow上找到了2个比较好的解决办法,在这里分享给大家。

方法一

该方法的步骤是,首先在你的AppDelegate中定义一个方法, 用于处理异常:

[html]  view plain copy
  1. void uncaughtExceptionHandler(NSException *exception) {  
  2.     NSLog(@"CRASH: %@", exception);  
  3.     NSLog(@"Stack Trace: %@", [exception callStackSymbols]);  
  4.     // Internal error reporting  
  5. }  


然后在应用启动时,设置这个方法作为自己的自定义异常回调:
[html]  view plain copy
  1. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions  
  2. {  
  3.     NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler);  
  4.     // Normal launch stuff  
  5. }  


完成之后,当对于上面的异常,在定义了这个回调之后,Log信息变成如下所示,出错行一目了然,根据下面的可读的stack trace,我一下就可以找到是QuestionParser这个类的第378行导致的异常,进而可以跳到出错行分析原因,很容易就把bug修复了。
[html]  view plain copy
  1. Ape[2711:11303] CRASH: *** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[2]  
  2. Ape[2711:11303] Stack Trace: (  
  3.   0   CoreFoundation                      0x0209402e __exceptionPreprocess + 206  
  4.   1   libobjc.A.dylib                     0x01a71e7e objc_exception_throw + 44  
  5.   2   CoreFoundation                      0x0205aa95 -[__NSPlaceholderDictionary initWithObjects:forKeys:count:] + 165  
  6.   3   CoreFoundation                      0x020874e9 +[NSDictionary dictionaryWithObjects:forKeys:count:] + 73  
  7.   4   Ape                                 0x00096a0a +[QuestionParser parseToDictionary:] + 378  
  8.   5   Ape                                 0x00096434 -[QuestionStore putQuestion:] + 308  
  9.   6   Ape                                 0x00089ddf -[QuestionViewController requestFinished:] + 303  
  10.   7   Ape                                 0x000869dd -[NetworkAgent requestFinished:] + 653  
  11.   8   Ape                                 0x00085d33 __27-[NetworkAgent addRequest:]_block_invoke_0 + 131  
  12.   9   libdispatch.dylib                   0x01cf153f _dispatch_call_block_and_release + 15  
  13.   10  libdispatch.dylib                   0x01d03014 _dispatch_client_callout + 14  
  14.   11  libdispatch.dylib                   0x01cf2fd6 _dispatch_after_timer_callback + 28  
  15.   12  libdispatch.dylib                   0x01d03014 _dispatch_client_callout + 14  
  16.   13  libdispatch.dylib                   0x01cfa8b7 _dispatch_source_latch_and_call + 219  
  17.   14  libdispatch.dylib                   0x01cf6405 _dispatch_source_invoke + 322  
  18.   15  libdispatch.dylib                   0x01cf3768 _dispatch_main_queue_callback_4CF + 187  
  19.   16  CoreFoundation                      0x0203aaf5 __CFRunLoopRun + 1925  
  20.   17  CoreFoundation                      0x02039f44 CFRunLoopRunSpecific + 276  
  21.   18  CoreFoundation                      0x02039e1b CFRunLoopRunInMode + 123  
  22.   19  GraphicsServices                    0x0282b7e3 GSEventRunModal + 88  
  23.   20  GraphicsServices                    0x0282b668 GSEventRun + 104  
  24.   21  UIKit                               0x00be265c UIApplicationMain + 1211  
  25.   22  Ape                                 0x00016c5d main + 141  
  26.   23  Ape                                 0x00002b05 start + 53  
  27.   24  ???                                 0x00000001 0x0 + 1  
  28. )  


方法二

方法二相比方法一更加简单,具体做法是在XCode界面中按cmd + 6跳到Breakpoint的tab,然后点击左下角的+号,增加一个Exception的断点,如下图所示。这样,当异常出现时,会自动停在异常处,而不会抛出到UIApplicationMain。拿我的有bug的程序来说,代码会自动断在QuestionParser这个类的第378行。

总结

其实以前XCode是能显示出可读的stack trace信息的,似乎到了XCode4.2以后就出问题了。所以上面提到的2个办法相当于walk around解决了XCode4.2以后出现的bug。如果该文章对你有用,希望你能帮我点击下面的分享按钮,分享给更多朋友,同时也帮我宣传一下博客,这将有助于我分享更多的心得给大家,Have fun!

Xcode真机调试必备:Instruments网络连接调试全攻略(iOS15+适配指南) 本文详细解析了Xcode中Instruments工具在iOS15+环境下的网络连接调试功能,从基础配置到高级技巧,帮助开发者快速定位和解决网络问题。内容涵盖环境准备、核心功能详解、iOS15+新特性适配以及实战案例,是提升iOS应用网络调试效率的必备指南。 阅读详情

相关推荐

iOS开发者必备:Xcode真机调试支持包全版本整理与使用指南

本文为iOS开发者提供了Xcode真机调试支持包(DeviceSupport)的完整管理指南。针对常见的“Could not locate device support files”错误,详细阐述了其原理,并系统介绍了从官方及社区获取、验证、整理全版本支持包的方法。重点讲解了如何通过构建个人资源库、使用符号链接实现多Xcode版本共享,以及高级的版本“欺骗”技巧,旨在帮助开发者高效解决真机调试兼容性问题,提升开发效率。

kk1234的博客 527

让XCode的 Stack Trace信息可读

昨天在写iOS代码的时候,调试的时候模拟器崩溃了。异常停在了如下整个main函数的入口处: 1 2 3 4 5 6 7 int main(int argc, char *argv[]) { @autoreleasepool { // 异常停在了下面这行,毫无提示作用 return UIApplicati...

shappy1978的专栏 232

Xcode 14.0真机调试必备组件完整包

Xcode作为苹果官方集成开发环境(IDE),是iOS、iPadOS、macOS等平台应用开发的核心工具。随着Xcode 14.0版本的发布,其对Swift语言支持、编译器性能优化以及真机调试能力进行了全面升级。本章系统介绍Xcode 14.0的整体架构与核心功能模块,重点解析其在真机调试场景下的角色定位和技术依赖。本质上是一个经过加密签名的只读磁盘映像,内部封装了用于启动设备上afc2等关键调试服务的可执行文件和配置清单。每个镜像都严格绑定特定的iOS版本号和设备架构(如arm64e)。

weixin_28999139的博客 1415

xcode如何查看callstack

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34357962的博客 473

Veeam Backup Replication Console 13 备份 PVE

本文介绍了如何通过Veeam Backup & Replication控制台配置与Proxmox VE(PVE)服务器的连接,包括主机地址、用户名密码和SSH信任设置。随后详细说明了部署备份Worker虚拟机的步骤,涵盖网络配置和VM创建。接着指导用户创建PVE虚拟机备份任务,包括命名、选择备份对象、存储位置、备份类型设置,以及配置备份计划任务。最后描述了备份测试执行过程,从启动备份到完成状态通知的完整流程。整个操作涉及服务器连接、Worker部署、备份配置和任务执行四个主要环节。

极致,细节 1602

MicroPython跨平台移植实战:从源码解析到STM32+FreeRTOS部署

本文详细解析了MicroPython的跨平台移植实战,重点介绍了如何将其从源码开始,成功部署到STM32微控制器并运行于FreeRTOS实时操作系统。内容涵盖源码结构解析、编译环境搭建、内存管理协调、FreeRTOS任务集成、数学库(math)启用与优化,以及自定义模块开发等核心步骤,为开发者提供了一套完整的、可操作的嵌入式Python移植方案。

vodka的博客 1014

xcode4.2中如何取消ARC

sdk5的xcode自带了arc,虽然arc是比gc强大很多,但由于开发的习惯性,还有框架不适应,在arc还没足够稳定和安全以前,暂时还是使用手动alloc和release等。 至于如果取消arc,分3步: 1、project -> Build settings ->Apple LLVM complier 3.0 - Language-&...

weixin_34038652的博客 145

用Python实现古诗词填字游戏(三)

古诗词做填字游戏的第三部分代码,也是最核心的部分。实现对诗文和关键字的选定,并确定文字的输出位置。

PosPro的专栏 6117

[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from object

错误: // 苹果审核给的错误 CoreFoundation 0x1a1331dd0 +[NSDictionary dictionaryWithObjects:forKeys:count:] + 59 // 真实的错误 [__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[0] [__NSPlaceholderDictionary ini..

huwan.cn的博客 3437

手把手教你学Simulink--巴特沃斯滤波器设计与实现仿真

巴特沃斯滤波器的设计目标是拥有尽可能平滑的通带响应,这意味着在通带内信号衰减最小且没有波动。这种类型的滤波器非常适合用于音频处理、生物医学信号处理以及其他需要高保真度的应用场景。根据应用需求的不同,可以选择低通、高通、带通或带阻滤波器。明确你的系统需求,如输入信号类型(正弦波、方波等)、滤波器类型(低通、高通、带通或带阻)、截止频率、滤波器阶数等。假设我们需要设计一个4阶低通巴特沃斯滤波器,其截止频率为1kHz,用来过滤掉高于1kHz的所有频率成分。

MHD0815的博客 450

RK3568平台开发系列讲解(安卓篇)LED呼吸灯系统流程

1.app层封装后使用NotificationManager发出:NotificationManager.notify() 2.Android 系统架构中:一个manager类对应一个aidl接口,一个manager对应一个底层的服务,notification也是这个架构

内核笔记 3646

logback配置示例-包含生成json日志,与ELK整合

<?xml version="1.0" encoding="UTF-8"?> <configuration> <contextName>${HOSTNAME}</contextName> <property name="LOG_PATH" value="phantom-log" />

741

嵌入式开发工程师笔试面试指南-Linux驱动

linux驱动

weixin_43491077的博客 473

Mac开发者必备:OpenClaw联动Qwen3.5-9B实现Xcode调试自动化

本文介绍了如何在星图GPU平台上自动化部署Qwen3.5-9B镜像,实现Xcode调试自动化。通过OpenClaw工具与Qwen3.5-9B模型的联动,开发者可以快速分析错误日志、生成测试用例并自动验证,显著提升iOS开发效率。典型应用场景包括崩溃日志的语义分析和自动化测试生成。

TopazHawk54的博客 421

3、灵巧手的设计与构造

本文详细探讨了灵巧手的设计与构造,包括多指结构、关节和连杆设计、传感器集成以及分层控制架构等内容。同时,通过工业装配、医疗手术辅助和日常生活辅助等实际应用案例,展示了灵巧手的灵活性和适应性,并分析了当前设计面临的挑战及未来发展方向。

brandy的博客 491

orange软件:入门使用

orange做数据分析契机实验手册目录orange软件部分界面展示小试牛刀:数据导入和展示小试牛刀:散点图绘制总结 契机 今天在上大数据时代实验课,作为一名软件工程专业的大三学生,在上这节公选课之前就决定这节课做完这个学期所有的实验报告,可以说“有亿点”不屑;尤其当老师说Python很麻烦的时候,我更是震惊了,因为我接触过这么多编程语言,Python真的很友好了,很傻瓜,但是当老师打开实验手册的时候,我真香了!!!下面先来看看手册的目录: 实验手册目录 为什么会真香呢,因为目录里这些有好多机器学习算法!

weixin_45880844的博客 1万+

XCode5 真机调试及发布应用

之前在真机调试和发布上面遇到的一些问题,在网上查了很多资料,头都大了,给大家分享一下,希望大家多多交流 一、XCODE 真机测试 Xcode5已经很智能,只需生成一个开发证书,安装后,插入设备会自动添加,注意,当Mac系统升级后,证书需要重新生成。 证书生成步骤: 1、生成 CertificateSigningRequest.certSigningRequest 文

yulang1989的专栏 8485

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

xcode最新调试技术 - 2018 wwdc session, 黑科技,必备

https://juejin.im/post/5b1cd870e51d4506dc0ac76c

openglnewbee的博客 1066

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

xcode开发快捷键

转载:http://linzr33.blog.163.com/blog/static/573802820123161916156/ xcode相关: 关于xcode 可设 偏好设置 command+, 清空缓存 可设 隐藏xcode command+h 隐藏其它 command+option+h 显示全部 可设 退出xcode command+q 文件相关:

fatlilx的专栏 599

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Mac开发者必备:OpenClaw+Gemma-3-12b-it自动化Xcode调试流水线

本文介绍了如何在星图GPU平台上自动化部署gemma-3-12b-it高性能开源大语言模型(LLM)WebUI镜像,构建Mac开发者专用的Xcode调试流水线。该方案通过实时监控Xcode控制台输出,结合Gemma模型智能解析复杂报错,实现自动重启模拟器或执行针对性测试用例,显著提升iOS应用开发效率。

weixin_29935511的博客 401

比较全的xcode真机调试教程

Xcode真机调试初体验 1. 开发者证书(Certificates) 分为开发(iOS Development)和发布(iOS Distribution)两种,无论是真机调试,还是上传到App Store都需要该证书,是一个基证书,用来证明开发者身份的。 2. 应用标识(Identifiers) App IDs,每一个应用的独立标识。可以配置该应用的权限,比如是否用到

zhangjinzhong199093的专栏 1014

Xcode菜单功能说明

File 文件 Edit 编辑 View 视图 Find 查找 Navigate 导航 Editor 编辑 Product 产品 Debug 调试 Source Control 源代码管理 Window 窗口 Help 帮助 File 文件 New 新建 New Tab 新标签 New Wi...

dgzr3370的博客 260

Xcode 快捷键大全

Xcode 快捷键大全 收藏 现在说明一下,command相当于ms键盘的window键,option相当于ctrl,键值一样,系统偏好设置里面可以更改。 xcode 相关: 关于xcode 可设 偏好设置 command+, 清空缓存 可设 隐藏xcode command+h 隐藏其它 command+option+h 显示全部 可设 退出xcode c...

iteye_1576的博客 176

整理了一下Xcode快捷键,史上最全!

转自 http://blog.youkuaiyun.com/zhaozy55555/article/details/7671480 xcode相关: 关于xcode  可设 偏好设置 command+, 清空缓存 可设 隐藏xcode command+h 隐藏其它 command+option+h 显示全部 可设 退出xcode command+q   文件相关: 新建项目 co

cy-app 856

iOS开发--xcode快捷键

1. 文件CMD + N: 新文件CMD + SHIFT + N: 新项目CMD + O: 打开CMD + S: 保存CMD+OPt+S:保存所有文件CMD + SHIFT + S: 另存为CMD + W: 关闭窗口CMD + Q :退出XcodeCMD + SHIFT + W: 关闭文件 2. 编辑CMD + [: 左缩进CMD + ]: 右缩进 CMD+shift+F:项目中查找CMD+G...

weixin_30279671的博客 104

Xcode 17.2 真机调试包

Xcode 17.2 真机调试包 去发现同类优质开源项目:https://gitcode.com/ 此资源为Xcode 17.2版本真机调试包,适用于开发者进行iOS应用开发时的真机调试。使用此调试包,您可以在连接的真机上测试和调试您的应用程序,确保应用在实际设备上的性能和稳定性。 去发现同类优质开源项目:https://gitcode.com/ ...

gitblog_06747的博客 340
上一篇: iPhone开发之实现UITableView多选删除功能详解
下一篇: iOS应用程序生命周期(前后台切换,应用的各种状态)详解
临红尘
博客等级 码龄19年 10粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值