Xcode调试、性能优化基本工具使用简单整理

断点

1. 普通断点

在行号那儿点一下就加上了,最常用的断点,略。

2. 条件断点

很多时候问题代码是被高频调用直到特定条件下才出现问题的,这种时候可以使用条件断点。

在任意断点右击选择Edit Breakpoint即可编辑条件。

3. 符号断点

有时候我们没有源码只有头文件,不方便加普通断点,可以使用符号断点。在断点界面点击 + ,选择Ad Symbolic Breakpoint,即可添加符号断点。

4. 异常断点

抛出Objc异常时的断点,由于Objc能捕获异常的场景非常少,因此用处比较有限。

LLDB常用命令

  1. p/po(print/print object)

    • 打印一个值/对象
  2. call

    • 调用一个方法并输出返回值
  3. expr

    • 执行一个表达式,常用于运行时改变数据,构造特定场景
  4. bt

    • 打印当前堆栈信息

更多参考iOS——调试工具LLDB学习

僵尸对象

用于对野指针问题的分析。

野指针问题导致的crash堆栈往往千奇百怪,其根本原因是对象被释放后,对应的内存是不确定什么时候会被覆盖多少的,造成后面访问时可能正常也可能crash。

僵尸对象就是消除这种不确定性的方法,在对象被释放时,会生成一个僵尸类,把对应内存中的isa替换掉,指向这个僵尸类。这样在通过野指针访问这个对象时就可以100%捕获了。

此功能可以在“Edit Scheme…” —> “Run” —> “Diagnostics” —> “Zombie Objects”中打开,应当只在debug时使用,对性能影响比较大。

Address Sanitizer

Address Sanitizer是个更底层一点的手段,僵尸对象只对Objc对象的野指针有效,而Address Sanitizer可以检查任意内存访问错误的问题。典型场景如C的数组越界。

Time Profile

Time Profile用于检测CPU使用耗时,方便优化性能问题。

如果某个操作存在性能问题,可以在操作前,开启Time Profile Record,操作后Stop。Time Profile会记下期间所有方法的CPU耗时,并从高到低排列。于是就可以方便地找到耗性能的瓶颈进行针对性地优化。

Allocations

Allocations工具用于分析内存问题。

在应用启动后,特定操作前后进行打点,即可看到期间所有的内存增长来源。

对于可复现的内存问题非常方便定位。

Image placeholder
songslybai
未设置
  63人点赞

没有讨论,发表一下自己的看法吧

推荐文章
Go语言高级编程_3.9 Delve调试器

3.9Delve调试器 目前Go语言支持GDB、LLDB和Delve几种调试器。其中GDB是最早支持的调试工具,LLDB是macOS系统推荐的标准调试工具。但是GDB和LLDB对Go语言的专有特性都缺

PHP 性能优化 - php.ini 配置

内存 默认设置 memory_limit=128M 单个进程可使用的内存最大值,这个值的设定可以从以下几点考虑: 应用的类型。如果是内存集中型应用,可增加该值; 单个PHP进程平均消耗的内存,该值

为高性能优化 PHP-FPM

PHP是无处不在的,可以说是互联网Web应用上使用最广泛的语言。 然而,它的高性能并不为人所知,尤其是在涉及到高并发系统时。这就是为什么对于这样特殊的用例,正在被Node(是的,我知道,它不是一种语

上线清单 —— 20 个 Laravel 应用性能优化项

让我们开始吧!假若你的laravel应用已经投入生产环境中。 从第一个用户,到第十,第一百,直到成千上万的用户!慢慢地,随着用户越多,你的网站会越来越慢 那我们应该如何做?细节决定成败 经过一番搜索

Hadoop YARN:调度性能优化实践

背景YARN作为Hadoop的资源管理系统,负责Hadoop集群上计算资源的管理和作业调度。美团的YARN以社区2.7.1版本为基础构建分支。目前在YARN上支撑离线业务、实时业务以及机器学习业务。离

etcd 在超大规模数据场景下的性能优化

作者|阿里云智能事业部高级开发工程师 陈星宇(宇慕)划重点etcd优化背景问题分析优化方案展示实际优化效果本文被收录在5月9日cncf.io官方blog中,链接:https://www.cncf.io

Elasticsearch 亿级数据检索性能优化案例实战!

一、前言数据平台已迭代三个版本,从头开始遇到很多常见的难题,终于有片段时间整理一些已完善的文档,在此分享以供所需朋友实现参考,少走些弯路,在此篇幅中偏重于ES的优化,关于HBase,Hadoop的设计

MySQL 性能优化:8 种常见 SQL 错误用法!

1、LIMIT语句分页查询是最常用的场景之一,但也通常也是最容易出问题的地方。比如对于下面简单的语句,一般DBA想到的办法是在type,name,create_time字段上加组合索引。这样条件排序都

一场HBase2.x的写入性能优化之旅

本文通过实战跑分来展示HBase2.x的写入性能首先,简单介绍一下我们的测试环境:集群由5个节点组成,每个节点有12块800GB的SSD盘、24核CPU、128GB内存;集群采用HBase和HDFS混

一文带你掌握常见的Pandas性能优化方法,让你的pandas飞起来!

微信公众号:「Python读财」如有问题或建议,请公众号留言Pandas是Python中用于数据处理与分析的屠龙刀,想必大家也都不陌生,但Pandas在使用上有一些技巧和需要注意的地方,尤其是对于较大

我在大厂写React,学到了什么?性能优化篇

课程推荐:前端开发工程师--学习猿地--送8个上线商业项目 前言我工作中的技术栈主要是React+TypeScript,这篇文章我想总结一下如何在项目中运用React的一些技巧去进行性能优化,或者更好

Vue转React两个月来总结的性能优化方法

课程推荐:前端开发工程师--学习猿地精品课程 换了新公司,工作中使用的技术栈也从Vue换到了React,作为一个React新人,经常的总结和思考才能更快更好的了解这个框架。这里分享一下我这两个月来使用

JavaScript日常代码开发代码层面的性能优化

课程推荐:java开发工程师--学习猿地精品课程 随着软件开发行业的不断发展,性能优化已经是一个不可避免的话题,本质上说任何可以提高运行效率,降低运行开销的行为,都可以看做是一种优化操作,前端开发过程

打造“数字化基石”,深信服在不断开疆沃土!

2019年深信服创新大会,已圆满结束,但也是一个全新的开始!深信服将以数字化转型为契机,打造更敏捷、更开放、更智能的新IT基础架构能力。为了具备这样的能力,深信服一直在研发和市场方面做大量投入。关于这

Oracle调度作业引起的空间骤增问题处理记录

1、 问题描述接到客户电话告知,说是近期数据库磁盘目录空间增长特别快, 1-2 天就满了。联系客户对数据库进行分析后,发现造成空间急剧增长的原因主要是 job 任务的 trace 文件产生的量太大造成

使用BCC工具分析系统性能

系统管理员可以通过利用BCC(BPFCompilerCollection)库的工具来分析操作系统性能和获取操作系统信息。BCC介绍BCC工具全称BPFCompilerCollection(BCC),是

PHP 高性能 Excel 扩展 1.2.7 发布

为什么使用php-ext-excel-export xlswriter是一个PHPC扩展,可用于在Excel2007+XLSX文件中写入多个工作表的文本,数字,公式和超链接。 它支持以下功能: 100

Onvif/RTSP海康大华网络安防摄像机网页无插件直播方案EasyNVR如何使用Excel将通道配置简单化?

进入移动互联网时代以来,企业微信公众号已成为除官网以外非常重要的宣传渠道,当3.2亿直播用户与9亿微信用户的势能累加,在微信上开启直播已成为越来越多企业的必然选择。EasyNVR核心在于摄像机的音视频

Spring Boot自动装配整理

首先写一个我们自己的HelloWorld配置类 1、基于"注解驱动"实现@Enable模块 @ConfigurationpublicclassHelloWorldConfiguration{@Bean

【MySQL实战45讲】索引部分整理

本文摘抄自极客时间【MySQL实战45讲】为什么要有索引?索引的作用是什么?索引的出现其实就是为了提高数据查询的效率,就像书的目录一样。一本书我们可以通过目录中快速的定位其中的某一个知识点;对于数据库

最新 React Router 全面整理

Reactrouter已经到了V5版本,增加了基于ReactHooks的一些API,比如useParams、useHistory等等,让我们可以在组件中不接受routeprops就可以拿到路由信息{m

Http接口安全整理

推荐课程:融职教育--web全栈开发就业班(含价值500万10个商业项目) 1.Http接口安全概述: 1.1、Http接口是互联网各系统之间对接的重要方式之一,使用http接口,开发和调用都很方便,

html5测试题整理--针对标签的概念性

推荐课程:web全栈开发就业班--收到offer再缴学费--融职教育 1.哪个元素被称为媒体元素的子元素? 答案:。 标签为媒体元素(比如and)规定外部文本轨道。这个元素用于规定字幕文件或其他包含文

给小白整理的第三篇Python知识点

课程推荐:Python开发工程师--学习猿地--送9个上线商业项目 7、面向对象编程万物皆是对象,Python当然支持面向对象编程。类和对象是面向对象编程的两个主要方面,类创建一个新的对象,对象是这个

详解 PHP 反射的基本使用

PHP反射 今天我要给大家讲解的是PHP当中使用非常普遍的高级操作:反射。反射在当今几乎所有的PHP框架或者工具中都占用非常重要的角色,就比如Laravel的容器,容器对于Laravel架构来说极其重