iOS开发之Xcode常用调试(Debug)技巧

这篇具有很好参考价值的文章主要介绍了iOS开发之Xcode常用调试(Debug)技巧。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、Xcode 调试技巧之:NSLog

上面也提到了,在我们日常的开发过程中最常⻅的Debug方式就是打Log。而在OC语言中,打Log是采用NSLog方 法。但是NSLog效率低下,具体原因可以看这篇博客( NSLog效率低下的原因及尝试lldb断点打印Log)。所 以在平时的开发过程中,能不打Log就不打Log。实在想打Log网上也有对NSLog的一些优化方法,可以阅读王巍 的《宏定义的黑魔法 - 宏菜⻦起⻜手册》如下代码便出自其中

#ifdef DEBUG
#define NSLog(format, ...) printf("[%s] %s [%d] %s\n", __TIME__, __FUNCTION__, __LINE__, [[NSString stringWithFormat:format, ##__VA_ARGS__] UTF8String]);
#else
#define NSLog(format, ...)
#endif

另外在使用NSLog的时候应当注意,release版本中应该要去掉NSLog。

2、Xcode调试技巧之:LLDB

LLDB全称Low Level Debugger,并不是低水平的调试器,而是轻量级的高性能调试器,默认内置于Xcode中。LLDBDebug 在编译后就是一个 Macho的可执行文件,也可理解为 镜像文件image并不是图像的意思,而是代表镜像。这里跟上我们自己的工程名,即用image定位寻址才是寻找我们自己的代码。

1. p 和po 命令

p 命令是 print 的缩写,查看基本数据类型的值,如果使用p命令查看的事对象,那么只会返回对象的额指针地址,p 命令后面除了可以接收变量,常量,还可以接 表达式。

po:print object的缩写,表示显示对象的文本描述,如果对象不存在则打印nil。

❌p 和 po 都不可以使用宏❌

简单的打印一个对象我们就不说了,我们来说说特殊的应用场景吧!

应用场景:你想知道一个视图包含了哪些子视图。当然你可以循环打印子视图,但是下面只需要一个命令即可解决。

输出视图层级关系(这是一个被隐藏的命令): `po [[self view] recursiveDescription] `

2. call:执行一段代码

call NSLog(@"%@", @"yang")

3. expr:动态执行指定表达式
expr i = 101
输出: (int)$0 = 101

4. bt:打印当前线程堆栈信息
如果要打印所以线程堆栈信息,使用:bt all即可。
使用bt 命令可以查看函数调用堆栈,使用bt all 可以查看所有堆栈信息,然后使用frame select 即可查看对应函数详细,同时配合up和down命令追踪函数的调用和被调用关系。演示如下:
xcode怎么调试,iOS技术知识积累,ios,xcode,macos

5. image:常用来寻找栈地址对应代码位置:
举个栗子:
应用场景数组越界模拟代码,报错后执行:image lookup --address 0x00000001035230ae
xcode怎么调试,iOS技术知识积累,ios,xcode,macos

** 6. x命令
x命令是查看地址在内存的情况,一般查看对象地址和对象的属性地址
x/4gx命令:打印4个16进制地址。
x/8gx命令:打印8个16进制地址。
xcode怎么调试,iOS技术知识积累,ios,xcode,macos

关于LLDB 其他使用可以学习:
iOS之Xcode断点调试
LLDB官网

三、Xcode调试技巧之:断点调试(breakpoint)

Xcode断点分以下几种:

Xcode工具栏切换到断点处,选择左下角 + 号:
xcode怎么调试,iOS技术知识积累,ios,xcode,macos
可以看到断点类型:

  1. Swift Error Breakpoint
  2. Exception Breakpoint
  3. OpenGL ES Error Breakpoint
  4. Symbolic Breakpoint
  5. Constraint Error Breakpoint
  6. Test Failure Breakpoint

3.1 Breakpoint(断点)调试

看这6种断点之前,先来介绍一下,如何编辑断点:
根据需要加断点,鼠标在断点上右键:
xcode怎么调试,iOS技术知识积累,ios,xcode,macos
可以看到上图五种类型:

  1. Edit Breakpoint
  2. Disable Breakpoint
  3. Disable Other Breakpoints
  4. Delete Breakpoint
  5. Reveal in Breakpoint Navigator
1. Edit Breakpoint

点击Edit Breakpoint后(使用比较频繁):
xcode怎么调试,iOS技术知识积累,ios,xcode,macos
可以看到有5种操作条件:

  • name (断点名称)
  • Condition(条件)
  • Ignore(忽略)
  • Action(执行语句)
  • Options

(1) Name 和 Condition

Condition可以输入一个条件表达式,如果条件满足了,就会触发断点,例如:
xcode怎么调试,iOS技术知识积累,ios,xcode,macos
使用比较频繁,往往在处理数据时for循环找到指定对象时用到,当然还有其他用法,因场景而异。

(2) Ignore

设置忽略断点的次数,比如设置2,在上述例子中,会忽略前两次次for循环,而在第三次时触发断点
xcode怎么调试,iOS技术知识积累,ios,xcode,macos

(3) action

点击 Action
xcode怎么调试,iOS技术知识积累,ios,xcode,macos
默认是Debugger Command (会记忆你上次选择的类型),点击会有6种类型。

  1. AppleScript
  2. Gapture GPU Workload
  3. Debugger Command
  4. Log Message
  5. Shell Command
  6. Sound

功能Debugger Command和Log Message比较常用

1.AppleScript

会在断点触发的时候执行Mac OS X内置的一种功能强大的脚本语言。
xcode怎么调试,iOS技术知识积累,ios,xcode,macos

2.Gapture GPU Gapture GPU Workload

调试跟GPU相关的问题:
xcode怎么调试,iOS技术知识积累,ios,xcode,macos

3.Debugger Command

可以输入LLDB命令:
xcode怎么调试,iOS技术知识积累,ios,xcode,macos
我们常常使用expr(expression简写,两种写法lldb都会识别)在断点处强行修改变量值
xcode怎么调试,iOS技术知识积累,ios,xcode,macos

4.Log Message

%B输出断点的名称

%H输出断点执行的次数

@@之间输入表达式,比如(@5*2@ 会输出结果10,也可以输出对象结果)

勾选Log message to console,会在控制台输出结果。
勾选Speak message,不会在控制台输出,但是会朗读处结果(用的少)。
xcode怎么调试,iOS技术知识积累,ios,xcode,macos

5.Shell Command

点击Choose,选择写好的脚本文件,触发断点时会执行所选择的脚本
xcode怎么调试,iOS技术知识积累,ios,xcode,macos

6.Sound

会在断点处触发声音,如下图,有14中声音。
xcode怎么调试,iOS技术知识积累,ios,xcode,macos

(4) Options

勾选Automatically continue after evaluating actions之后程序会在断点产生后继续运行。一般用于断点处修改值,或者输出断点信息时会勾选此选项,运行时,断点生效,但是断点处不停。如图,执行for循环结束,断点处并没有停留。
xcode怎么调试,iOS技术知识积累,ios,xcode,macos

3.2 Disable Breakpoint

点击Disable Breakpoint后会使断点失效,但断点依然保留,颜色会边浅色(快速使断点失效方法:鼠标单击断点)。
xcode怎么调试,iOS技术知识积累,ios,xcode,macos

再次鼠标在断点处右键:
xcode怎么调试,iOS技术知识积累,ios,xcode,macos

点击Enable Breakpoint断点重新生效(快速使断点生效方法:鼠标单击断点)。

3.3 Disable Other Breakpoints

点击Disable Other Breakpoints 快速将其他断点设为无效状态。这个蛮好用的
xcode怎么调试,iOS技术知识积累,ios,xcode,macos

3.4 Delete Breakpoint

点击Delete Breakpoint删除断点(快速删除断点方法:鼠标左建按住断点拖走松开鼠标,即删除断点)。
xcode怎么调试,iOS技术知识积累,ios,xcode,macos

3.5 Reveal in Breakpoint Navigator

点击Reveal in Breakpoint Navigator,会切换到导航断点处
xcode怎么调试,iOS技术知识积累,ios,xcode,macos

参考资料

iOS之Xcode断点调试
LLDB官网文章来源地址https://www.toymoban.com/news/detail-758457.html

到了这里,关于iOS开发之Xcode常用调试(Debug)技巧的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 苹果最新系统iOS 17的调试和适配方法 - Xcode 14.3.1 真机调试指南

    最近苹果发布了iOS 17作为其最新操作系统版本,作为开发者,你可能需要了解如何在Xcode 14.3.1中进行真机调试和适配。本文将为你详细介绍步骤和注意事项。 I. 检查Xcode版本 在开始之前,确保你已经安装了Xcode 14.3.1或更高版本。你可以在Xcode菜单中选择\\\"关于Xcode\\\"来查看具体版

    2024年01月17日
    浏览(46)
  • 手机升级到iOS15.8后无法在xcode(14.2)上真机调试

     之前手机是iOS14.2的系统,在xcode上进行真机测试运行良好,因为想要使用Xcode的Instruments功能,今天将系统更新到了iOS15.8   ,结果崩了 说是Xcode和手机系统不兼容不能进行真机测试。在网上查了好些方法,靠谱的就是下载相关版本的真机包。但是~~ 找了一圈发现目前并没

    2024年02月04日
    浏览(55)
  • IOS开发-XCode14介绍与入门

    iOS开发工具一直有个毛病,就是新版本的开发工具的总会有一些奇奇怪怪的bug。比如在我的Mac-Pro(2.3 GHz 八核Intel Core i9)中iOS stimulator就无法使用(MyMac是可用的)。但是真机就可以正常使用。也不知道是XCODE14是只对本家M系芯片的优化导致Intel用不了还是咋的,很是苦恼。

    2024年02月13日
    浏览(46)
  • iOS开发Swift-1-Xcode创建项目

    1.创建项目 双击Xcode App,选择Create a new Xcode project。  选择创建一个iOS普通的App项目。选择Single View App,点击Next。  填写项目名,组织名称等,点击next。  选择好文件的存储路径,点击create。  2.为前端添加组件 点击Main,选中View,在右下角show the Object library中找到label组件,

    2024年02月10日
    浏览(41)
  • Flutter ios真机调试报错Xcode couldn‘t find any iOS App Development provisioning profiles

    Could not build the precompiled application for the device. Error (Xcode): No profiles for \\\'com.example.jiniu\\\' were found: Xcode couldn\\\'t find any iOS App Development provisioning profiles matching \\\'com.example.jiniu\\\'. Automatic signing is disabled and unable to generate a profile. To enable automatic signing, pass -allowProvisioningUpdates to xcodebuild. 翻译

    2024年02月16日
    浏览(44)
  • MacOS 14 系统 XCode15、 Flutter 开发 IOS

    MacOS14 Sonoma 安装 Flutter 开发环境 MacOS 系统 Flutter开发Android 环境配置 MacOS 系统 Flutter开发IOS 环境配置​​​​​​​ 前面我们已经在MacOS14 M3芯片上安装好 Flutter环境,包括开发工具 VsCode 、Android Stuiod,那么flutter如何开发IOS呢? 我们知道IOS开发语言为 objcet-c或者 swift,Flutter是

    2024年02月03日
    浏览(92)
  • [游戏开发][Unity] 打包Xcode工程模拟器+真机调试

    Xcode版本:Xcode14 苹果开发者账号、相关设备cer证书、开发者证书、发布证书 账号分三类,个人,公司,企业,价格99/99/299美金 新注册账号的基本设置按网上的教程来就行 我们公司是企业账号,我的苹果开发者账号是公司一个User,这个和个人开发者不同。 账号还是非常重要

    2024年02月15日
    浏览(64)
  • mac电脑 安装 ios开发工具xcode步骤 以及新建ios项目

            在Mac电脑上安装Xcode,苹果公司的官方iOS开发工具,以及新建iOS项目,以下是详细步骤:         安装Xcode 1. 打开Mac上的App Store。 2. 在搜索栏中输入“Xcode”。 3. 从搜索结果中找到Xcode,点击“获取”按钮。 4. 输入您的Apple ID和密码,然后点击“安装”按钮。

    2024年02月20日
    浏览(47)
  • iOS开发进阶(六):Xcode14 使用信号量造成线程优先级反转问题修复

    应用 Xcode 14.1 进行项目编译时,遇到以下错误提示,导致APP线程暂停。 以上问题是由于iOS信号量造成线程优先级反转,在并发队列使用信号量会可能会造成线程优先级反转。 经过查询资料,发现是在 XCode14 上增加了工具,比如 : Thread Performance Checker ( XCode14 上默认开启的)

    2024年02月01日
    浏览(62)
  • iPhone开发--Xcode15下载iOS 17.0.1 Simulator Runtime失败解决方案

    爆句粗口,升级后公司网络下载iOS 17.0.1 Simulator Runtime一直出错,每次出错后都得重新开始下载,oh,f**k。上一次在在家里的网络升级成功。 进入网址:https://developer.apple.com/download/all/ 之后找到iOS 17.0.1 Simulator Runtime,点击下载,这个通过浏览器下载。 之后在命令行运行下面的

    2024年02月08日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包