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在使用上有一些技巧和需要注意的地方,尤其是对于较大

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

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

详解 PHP 反射的基本使用

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

不一样的css,sass(scss)的基本使用

前言此文主要记录sass的scss语法的基本使用。sass是css的预编译器,它扩展一些css所没有的变量的定义、条件控制、循环、自定义方法等。基础内容1.变量/*scss*/ //声明变量 $pri

MacOS 下的 Laravel 调试软件 - Tinkerwell

Tinkerwell是Macos下的一款用于调试的应用,支持本地调试和远程调试。 目前功能比较简单,包括: 基本界面设置-主题、字体、大小、侧边栏等 是否实时运行(仅本地可用) 是否启用Vim映射 设

使用 Vue.js 和 Iris 共建一个简单的 Todo MVC 应用

本文用Golang的Iris框架作为后端服务,vuejs渲染前端UI,用websocket通信。基于监听hash变化director.js库实现简单路由,axios库与后方沟通,netoffos.j

使用 Vue.js 和 Iris 共建一个简单的 Todo MVC 应用

数据服务 packagetodo import"sync" //Item条目数据 typeItemstruct{ SessionIDstring`json:"-"` IDint64`json:"i

GoWeb教程_11.2. 使用 GDB 调试

开发程序过程中调试代码是开发者经常要做的一件事情,Go语言不像PHP、Python等动态语言,只要修改不需要编译就可以直接输出,而且可以动态的在运行环境下打印数据。当然Go语言也可以通过Println

PHP 操作 Redis 的基本方法

最近系统性的研究了下redis,准备些一篇redis使用常遇到的问题;包括: redis的基本操作方法。 1redis的连接: //实例化redis $redis=newRedis(); //连接 $