首页
学习
活动
专区
圈层
工具
发布

Bugless 异常监控系统 (iOS端)

37手游研发的 Bugless 定位于从线上问题追踪的视角出发,检测代码异常,通过回溯问题,从而解决代码本身问题。...二、认识崩溃和异常 在讲解 Bugless 之前,让我们从三个层面来介绍,让大家认识App为什么会出现崩溃和异常,以及如何应对。...Unix 信号的种类有很多,在 iOS 应用程序中,常见的 Unix 信号有如下几种: SIGILL:程序非法指令信号,通常是因为可执行文件本身出现错误,或者试图执行数据段。...SIGFPE:程序浮点异常信号,通常在浮点运算错误、溢出及除数为等算术错误时都会产生该信号。 SIGKILL:程序结東接收中止信号,用来立即结東程序运行,不能被处理、阻塞和忽略。...[SEGV_ACCERR类型] Objective-C 产生异常的表现形式,如图表前5列中的 Invalid 类型异常。

3.1K30

扒虫篇-Debug几个实用的方法

设置这个参数后就能看到一些更详细的错误信息提示,甚至会有内存使用情况的展示。 ? C语言是一门危险的语言,内存安全是一个主要的问题。C语言中根本没有内存安全可言。...如Clang的静态代码分析,可以从代码中查找特定类型的内存安全问题。如Valgrind之类的程序可以在运行时检测到不安全的内存访问。 Address Sanitizer是另外一种解决方案。...如果进程定义了信号的处理函数,那么它将被执行,否则就执行默认的处理函数。 在iOS中就是未被捕获的Objective-C异常(NSException),导致程序向自身发送了SIGABRT信号而崩溃。...EXC_BAD_ACCESS EXC_BAD_ACCESS是一个比较难处理的crash了,当一个app进入一种毁坏的状态,通常是由于内存管理问题而引起的时,就会出现出现这样的crash。...使用Xcode来分析你的项目,从Xcode的 Product菜单选择 Analyze或按 Shift-Command-B.Xcode的将需要片刻的时间,但是当它完成的时候你会在左边的 Issue Navigator

2.2K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    编码篇-Block里面的小天地

    通常来说,block都是一些简短代码片段的封装,适用作工作单元,通常用来做并发任务、遍历、以及回调。 block是什么?在回答这个问题之前,先介绍一下什么是闭包。...并且因为block是一段代码,即不可变。所以对于block 使用copy 还是strong 效果是一样的。亲测是这样的,网上有些解释说不能使用 strong 是错误的。...Block的使用中很容易出现的问题 (1)一个类中有一个Block性质的属性,并且在代码里面有用到,如果在对象初始化的时候,不做处理是会崩溃的,这也是block不方便的地方,不像代理可以实现也可以不实现...block的代码是内联的,效率高于函数调用 block对于外部变量默认是只读属性 block被Objective-C看成是对象处理 小结 后续会持续更新 本文参考文章 深入浅出-iOS Block原理和内存中位置...唐巧-谈Objective-C block的实现 深究Block的实现 Objective-C中的Block

    93720

    【IOS】IOS开发问题解决方法索引(一)

    问题 首先说一下 EXC_BAD_ACCESS 这个错误,可以这么说,90%的错误来源在于对一个已经释放的对象进行release操作。...Objective-C 这段代码有三个致命问题:1、内存泄露;2、错误释放;3、造成EXC_BAD_ACCESS 错误。...这个过程就是当应用程序将要进入后台前(按下Home键)触发通知,然后执行applicationWillResignActive:notification方法完成一些操作。...通常对于UIApplication读者是没必要修改它的,只需要知道UIApplication接收系统事件即可,而如何编写代码来处理这些系统事件则 是程序员的工作。...处理系统事件需要编写一个继承自UIApplicationDelegate接口的类,而UIApplicationDelegate接 口提供生命周期函数来处理应用程序以及应用程序的系统事件,这些生命周期函数如下表所示

    1.4K40

    (译)openURL 在 iOS10中已弃用

    这个弃用的方法有一个要打开的URL 参数,并且返回一个表示成功或者失败的布尔值: // Objective-C - (BOOL)openURL:(NSURL*)url // Swift open func...iOS 10 下打开一个URL 这意味着如果你有一个只需要支持iOS 10以上的App,也不关心options 参数和 完成的状态,又不想 Xcode 报警告,你可以这样写: // Objective-C...显示 Objective-C代码: - (void)openScheme:(NSString *)scheme { UIApplication *application = [UIApplication...如果应用程序没有配置,或者用于禁止打开这个链接,则 completion handler 回调里的success为false(NO)。...为了覆写程序的默认动作(默认这个key的值是NO),我们需要创建一个字典,将对应的key 设置为true(YES),然后将字典传给 options 参数: // Objective-C NSDictionary

    3.5K10

    iOS: ARM64不定函数传参问题调试剖析

    | 导语  ABI(Application Binary Interface)描述了应用程序和OS之间的底层接口。...IMP指针 ---- Objective-C的方法调用是通过消息传递的形式,即: [receiver message:arg] 会被编译器转化为C函数调用 objc_msgSend(receiver,...---- 插曲 为了更好地分析原因,在新工程参照Code 1-1编写了测试代码,但是发生了编译错误 ?...说明 可以看到这次参数传递符合预期,因此未发生crash 问题分析与结论 结合测试分析、阅读手册可以得到以下关键点: 1.测试代码2的ARM64架构部分,函数调用时传参的行为非常像在通过调用栈传递参数,...两边传参约定的不对称,导致被调方法获取到了错误的参数,引起了crash。如下图所示。 ? 值得注意的是,在正确使用不定参数的情况下不会发生这个问题,会负责处理平台相关的问题。

    2.8K33

    iOS_Crash 异常类型

    如果 Swift 运行时遇到编程错误,运行时会捕获该错误并故意使程序崩溃,这些崩溃在崩溃报告中具有可识别的异常信息: 在 ARM 处理器: Exception Type: EXC_BREAKPOINT...若想在自己代码中使用相同技术来处理不可恢复的错误,请调用 __builtin_trap() 函数,这将允许系统生成带有线程回溯的崩溃报告,表明代码如何达到不可恢复的错误。 ---- 2....当 watchdog 在 5s 后终止程序时,花费 4s 的代码不会出现在回溯中,因为它已经完成,但它几乎消耗掉了整个挂钟时间。...尽管可以通过减少应用程序在后台任务中执行的工作量来避免该问题,但0xc51bad03并不表明该应用程序做了任何错误。更有可能的是,由于整体系统负载,应用程序无法完成其工作。 ---- 5....SIGQUIT并不意味这进程崩溃了,但可能以可检测的方式出现了错误行为。 如果 iOS 和 iPadOS 键盘扩展加载时间过长,主应用程序会终止键盘扩展。

    3.8K20

    iOS 短信通知接口示例代码:SwiftObjective-C 集成通知短信 API 流程

    本文聚焦iOS短信通知接口的标准化集成流程,提供可直接复用的ios短信通知接口API示例代码,分别基于Swift和Objective-C两种主流语言实现,拆解接口交互原理,梳理异常处理方案,帮助开发者快速解决集成过程中的各类报错问题...、APIID/KEY配置错误等,导致接口返回401/405等错误码;跨语言适配问题:Swift的异步请求逻辑与Objective-C的语法差异,易出现请求阻塞或JSON解析失败;异常处理缺失:未针对接口响应码做针对性处理...三、Swift/Objective-C实战集成示例3.1Swift版本集成示例以下是基于Swift的短信通知接口调用示例,封装为可复用的工具类,包含参数构造、异步请求、响应解析全流程:swift展开代码语言...版本集成示例以下是兼容Objective-C项目的集成示例,逻辑与Swift版本一致,适配老项目开发场景:objective-c展开代码语言:TXTAI代码解释#import代码可直接复用,覆盖Swift/Objective-C两大主流开发语言;开发中需重点关注接口响应码的处理

    7210

    Swift基础 嵌套

    Swift中的闭包类似于C和Objective-C中的块以及其他编程语言中的lambdas。 闭包可以从定义常量和变量的上下文中捕获和存储对任何常量和变量的引用。这被称为关闭这些常量和变量。...第一个闭包是一个完成处理程序,在成功下载后显示图片。第二个闭包是一个错误处理程序,向用户显示错误。...Couldn't download the next picture.") } 在本例中,loadPicture(from:completion:onFailure:)函数将其网络任务发送到后台,并在网络任务完成后调用两个完成处理程序之一...以这种方式编写该功能可以让您干净地将负责处理网络故障的代码与成功下载后更新用户界面的代码分开,而不是只使用一个处理这两种情况的闭包。 捕捉价值观 闭包可以从定义它的周围上下文中捕获常量和变量。...例如,许多启动异步操作的函数将闭包参数作为完成处理程序。该函数在开始操作后返回,但在操作完成之前不会调用闭包——闭包需要转义,以便稍后调用。

    1.4K00

    聊聊 Combine 和 asyncawait 之间的合作

    使用上述方法处理错误,可以获得编译器级别的保证优势,但在另一方面,对于一个逻辑复杂的数据处理链,上述的错误处理方式也将导致代码的可读性显著下降,对开发者在错误处理方面的掌握要求也比较高。...async/await 则采用了开发者最为熟悉的 throw-catch 方式来进行错误处理。基本没有学习难度,代码也更符合大多数人的阅读习惯。...两者在错误处理上功能没有太大区别,主要体现在处理风格不同。 生命周期的管理 在 Combine 中,从订阅开始,到取消订阅,开发者通过代码可以对数据链的生命周期做清晰的定义。...但当我们在receiveValue方法中使用 Task 调用 async/await 代码时会发现,由于没有提供回调机制,订阅者将无视异步代码执行完成与否,调用后直接会申请下一个值,这与我们的需求不符。...: resumeNotification, object: nil) } } ) .store(in: &cancellables) 由于需要回调才能完成整个处理逻辑

    1.2K30

    iOS - 老生常谈内存管理(二):从 MRC 说起

    在 Objective-C 中,它也可以看作是在许多数据和代码之间分配有限内存资源所有权的一种方式。...[dngt4zsa6b.png] Objective-C 在iOS中提供了两种内存管理方法: MRC,也是本篇文章要讲解的内容,我们通过跟踪自己持有的对象来显式管理内存。...特别是 Core Foundation 的创建对象的规则(请参阅 《The Create Rule》)不适用于返回 Objective-C 对象的方法。...有时它可能看起来很乏味或繁琐,但如果你始终使用访问器方法,那么内存管理出现问题的可能性会大大降低。如果你在整个代码中对实例变量使用retain和release,这肯定是错误的做法。...在《Effective Objective-C 2.0 编写高质量iOS与OS X代码的52个有效方法》书中的第 31 条 —— 在 dealloc 方法中只释放引用并解除监听 一文中也提到:在 dealloc

    2.2K21

    线程安全的iOS通用缓存库-SwiftlyCache(推广)

    iOS开发中或多或少都会使用到Cache来减少网络请求,在网络上也有很多使用Objective-c开发的Cache框架,而Swift开发的Cache框架相对来说就要少一些,所以我就用Swift 5开发了一款...MemoryCache:负责处理容量小,相对高速的内存缓存,线程安全,支持异步操作,支持自动和手动清理缓存功能. MemoryStorage:MemoryCache使用的双向链表类....DiskCache:负责处理容量大,相对低速的磁盘缓存,线程安全,支持异步操作,自动和手动清理缓存功能. DiskStorage:DiskCache内部实现类....((_ size:Int32)->Void)){} 性能对比: 之前也看过一些用Objective-c开发的Cache框架,比如PINCache,YYCache等,也基本了解了他们的一些优缺点,所以在SwiftlyCache...而YYCache和SwiftlyCache则需要每次从链表的最后开始移除,YYCache的cost淘汰是异步线程中进行的,而SwiftlyCache则是在当前线程中进行(每一次设置缓存数据完成后都会对TotalCost

    1.7K10

    Swift| 基础语法(四)

    三) Swift| 基础语法(四) Swift| 基础语法(五) 本文涉及: 闭包 代理 通知 构造函数 懒加载 重写属性的Set、get发方法 ---- 一、闭包 Swift 中闭包的概念就像是Objective-C...Swift 中的闭包有很多优化的地方: 1 根据上下文推断参数和返回值的类型 2 从单行表达式闭包中隐式返回 可以省略return 3 可以使用简化的参数如 $0 $1 意为从0或者1开始 4 提供了尾随闭包的语法...网络请求请求结束后的回调的闭包则是逃逸的,因为发起请求后过了一段时间后这个闭包才执行。 比如这个Alamofire里的处理返回json的completionHandler闭包,就是逃逸的。...闭包的循环引用问题 在Swift开发中,有一个原则就是能不写self就不写self,但是在闭包中必须写上self; 这是因为闭包是用来保存一段代码,而且系统也不知道这段代码具体的调用时间, 所以为了保证闭包中的对象不被释放...一种做法是将 protocol 声明为 Objective-C 的,这可以通过在 protocol 前面加上 @objc 关键字来达到*/ class MyTest: NSObject { weak

    1.8K10

    Objective-C 短信验证码 API 示例代码:使用 NSURLSession 完成接口调用

    在iOS原生开发中,基于Objective-C对接短信验证码API是用户登录、身份验证等核心场景的必备能力,但新手常因NSURLSession异步请求处理不当、参数编码错误等问题导致接口调用失败。...本文聚焦objective-c短信验证码API示例代码,拆解NSURLSession实现短信接口调用的底层逻辑,提供可直接复用的完整代码,同时解析参数编码、错误处理等关键痛点,帮助iOS开发者高效完成短信验证码功能对接...3.2完整示例代码实现以下是基于NSURLSession的objective-c短信验证码API示例代码,包含参数校验、编码、请求发送、响应解析全流程,注册链接作为获取API账号的入口注释在代码中:objective-c...五、总结与延伸本文提供的objective-c短信验证码API示例代码,基于NSURLSession解决了异步请求管理、参数编码、错误处理三大核心痛点,代码可直接复用至iOS项目中。...总结objective-c短信验证码API示例代码的核心是正确处理x-www-form-urlencoded参数编码和NSURLSession异步回调;前置参数校验、数据脱敏、主线程回调是提升代码健壮性的关键

    9810
    领券