iOS崩溃之dispatch_async

news/2024/7/20 21:28:49 标签: ios, cocoa, macos

问题

先直接上堆栈

一看到这种堆栈就头痛,但最近正好在学习Apple源码阅读,所以还是静下心来仔细分析。

从堆栈来看,crash的原因应该就是objc_terminate被调用了。再看是_dispatch_client_callout调用的,该方法常出现在dispatch_async中,被RunLoop调用,所属的库是libdispatch.dylib。

在Apple Open Source下载libdispatch,搜索_dispatch_client_callout

#undef _dispatch_client_callout
void
_dispatch_client_callout(void *ctxt, dispatch_function_t f)
{
	@try {
		return f(ctxt);
	}
	@catch (...) {
		objc_terminate();
	}
}

 这里f应该就是dispatch_async传过去的block,底下的objc_terminate很明显就是造成崩溃的直接原因。

而这里被try-catch包裹,那么崩溃的原因已经很明显了,block方法里抛出异常被捕获,触发objc_terminate(),造成崩溃。

解决

那么问题来了,如何确定是哪里抛出的异常呢?

首先,常用的NSSetUncaughtExceptionHandler肯定是没法用了,因为这是捕获了异常,主动结束程序。

我们需要的是在异常抛出的那个瞬间,获得当前的堆栈信息。突然想到了,可以使用Xcode提供的Exception Breakpoint。

当我这样设置好断点,满心欢喜地等待结果时,发现又不行。因为应用程序里有太多抛异常的地方了.....一卡一卡地,根本没法运行下去。要是可以跳过断点,并且打印堆栈就好了~

等等,好像这里就提供了这样的功能。我看了看下面的英文,尝试了一下。

可以!!每个抛异常的地方都打印出当前的堆栈,并且跳过。接着触发crash,找到最后打印的堆栈。

这里也可以用lldb命令来实现


http://www.niftyadmin.cn/n/5397607.html

相关文章

【探索AI】Sora - 探索AI视频模型的无限可能

Sora - 探索AI视频模型的无限可能 随着人工智能技术的飞速发展,AI视频模型已成为科技领域的新热点。而在这个浪潮中,OpenAI推出的首个AI视频模型Sora,以其卓越的性能和前瞻性的技术,引领着AI视频领域的创新发展。让我们将一起探讨…

java 通过 microsoft graph 调用outlook

废话不多说 一 官方文档 先看一下官方文档,https://learn.microsoft.com/zh-cn/graph/tutorials/java?contextoutlook%2Fcontext&tabsaad&tutorial-step1 其中的代码,可以通过地址下载:https://developer.microsoft.com/en-us/gra…

告别黑苹果!用docker安装MacOS体验苹果系统

用docker安装MacOS体验苹果系统 预先安装docker 预先安装docker sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo sed -i s/archive.ubuntu.com/mirrors.ustc.edu.cn/g /etc/apt/sources.list sudo apt updatesudo apt-get remove docker docker-engine docker…

Docker数据集与自定义镜像:构建高效容器的关键要素

目录 博客前言 一.数据卷 1.数据卷介绍 2.实战 宿主机和容器共享目录 容器和容器之间共享目录 二.自定义镜像 1.自定义镜像介绍 2.实战 2.1自定义centos,具备vim及ifconfig作用 构建镜像 通过镜像运行一个容器进行测试 2.2自定义tomact(文件为…

LLM int4算法autoround v0.1即将发布,欢迎试用

概述 AutoRound(https://github.com/intel/auto-round)实现了出色的量化性能,在W4G128上多数场景中接近无损压缩,适用于包括gemma-7B、Mistral-7b、Mixtral-8x7B-v0.1、Mixtral-8x7B-Instruct-v0.1、Phi2、LLAMA2等一系列流行模型…

SRC | 某后台登录绕过到getshell

本文由掌控安全学院 -17828147368 投稿 开局一个登录框,漏洞全靠运气,先测试一下弱口令无果,再来个万能密码绕过登录试试 我*,直接进去了,主要这个系统给人感觉就老 一般只要进入后台,功能点就多起来了&am…

Chat2table,简易表格分析助手

一 写在前面 之前用智谱AI的Chatglm3-6b模型写过一个简单的论文阅读助手,可用来辅助论文阅读等。而像表格,如Excel、CSV文件等内容的分析,也是不可忽略的需要,因此本文同样使用Chatglm3-6b来搭建一个表格分析助手,用于…

【Elasticsearch管理】节点角色及发现机制

文章目录 节点角色Master Eligible NodeData NodeIngest nodetribe nodeCoordinating nodeData Path 发现机制前置概念基本描述设置Zen discoveryPing列表单播基于文件 主节点选举集群故障集群状态更新无master的集群操作单节点集群发现过程 节点角色 任何时候启动一个Elastic…