Swift 关于Crash的一些看法

Swift 关于Crash的一些看法,第1张

在Swift中, 编译器不再支持预处理指令。作为替代,它使用编译时氏或缓的属性和build配置

在 Xcode 中 Build Setting 界面, 搜索 flags , 最下面就是.

我们可以通过在不同的环境下设置不同的 Tag , 来控制版本.

可以使用 #if 判定build的参数动态编译

自定义Log

还有一种方式实现版本管理就是通过切换不同的Target. 这里在参考中有详解.

在 腾讯Bugly官网 登录账号, 注册应用. 获取到AppKey.

在 文档中心 , 查看具体使用

先讲讲Object-C的方案

那怎么分析呢?

小节:

在Swift中怎么拦截crash, 避免程序崩溃呢?

目前除了调用 try-catch 方法, 并无其他比较好的解决方案, 但是这也是只能拦截 Foundation 框架里面的 NSArray , NSString 这种类型的. 并不能处理Array, String这种结构体.

既然写到这里, 推荐一个大佬写的 Swift 框架 GodEye , 里面有一个 CrashEye , 就是通过NSSetUncaughtExceptionHandler 和 signal(SIGABRT, SignalHandler), 来处理异常, 但歼模是无法避免崩溃团前, 具体我在 iOS崩溃日志 里有提到.

参考

最详细 Xcode的Targets管理项目的公开版本、测试版本、预发布版本等等

OC版LSSafeProtector

Swift版CrashEye

这是差宏win7的一宽氏个服务,类似360的可以设置禁止启动,如果没用这类安全软件虚巧册,可以到计算机管理中将此服务设置为手动 windows error reporting service

如何让程序崩溃时不d出错误对话框

很多程序崩溃时,会d出如下类似的错误对话框:

如何让程序优雅地崩溃?优雅的崩溃是指:在程序崩溃时不d出如上面的对话框。

甚雹誉至更优雅的方法是:在崩溃之前时加入自己的对话框,用于用户向程序开发方报告这一崩溃现象。

今天客户反映我们的程序崩溃后就起不来了,其实我们为了方便无人化管理,做了一个守护进程。如果程序异常退出就会重启那个程序,这在linux下没问题,程序崩溃了就直接退出返回非零值,但是window就bug了,搞不好就给你d出个错误对话框,你不点掉其实程序就没退出,守护进程就不知道这个程序是否崩溃,于谨正是这个程序就永远死在那个窗口上了。现在这不仅碍眼,还碍事!于是着手摆平之。

先介绍一下

EXCEPTION_EXECUTE_HANDLER(1)         表示下面执行__except块内及其后面的代码

EXCEPTION_CONTINUE_EXECUTION(-1)  表示回到抛出异常处继续向下执行

EXCEPTION_CONTINUE_SEARCH(0)         表示查祥肆悔找下一个异常处理例程入口

#include "stdafx.h"

#include   <windows.h>

#include <iostream>

using namespace std

long   __stdcall   callback(_EXCEPTION_POINTERS*   excp)

{

wcout<<"sdfds\n"

return   EXCEPTION_EXECUTE_HANDLER

}

int _tmain(int argc, _TCHAR* argv[])

{

SetUnhandledExceptionFilter(callback)  // 加入这句后,不会d出错误对话框了,程序崩溃悄无声息地退出

char *p = 0

*p = 'p'  // 程序走到此处会崩溃

return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12252994.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-22
下一篇2023-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存