`
sking777
  • 浏览: 23867 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

iOS崩溃捕获

阅读更多
有些低概率很难重现的闪退会让程序员很头疼,不知道怎么定位问题,其实是有办法捕获崩溃并获得当时的调用堆栈的。拿到堆栈保存下来,找个合适的时机回传到服务器给se分析,可以大大提高修复闪退的工作效率。

首先定义一个捕获异常的NSUncaughtExceptionHandler
void exceptionHandler(NSException *exception) {
    NSLog(@"exit with exception: %@", [exception reason]); // reason为崩溃原因描述
    NSLog(@"%@", [exception callStackSymbols]); // 这个方法可以难道崩溃时的调用堆栈
}

在启动的时候设置未捕获异常的处理函数
NSSetUncaughtExceptionHandler(&exceptionHandler);


==============================
以上是obj-c层面的,如果需要处理c层面的,可参考如下代码

定义要捕获的信号
static int s_fatal_signals[] = {
    SIGABRT,
    SIGBUS,
    SIGFPE,
    SIGILL,
    SIGSEGV,
    SIGTRAP,
    SIGTERM,
    SIGKILL,
};

信号的名称
static const char* s_fatal_signal_names[] = {
    "SIGABRT",
    "SIGBUS",
    "SIGFPE",
    "SIGILL",
    "SIGSEGV",
    "SIGTRAP",
    "SIGTERM",
    "SIGKILL",
};

static int s_fatal_signal_num = sizeof(s_fatal_signals) / sizeof(s_fatal_signals[0]);

获取调用堆栈的函数
+ (NSArray *)backtrace {
void *callstack[128];
int frames = backtrace(callstack, 128);
char **strs = backtrace_symbols(callstack, frames);

NSMutableArray *backtrace = [NSMutableArray arrayWithCapacity:frames];
for (int i = 0; i < frames; ++i) {
[backtrace addObject:[NSString stringWithUTF8String:strs[i]]];
}
free(strs);

return backtrace;
}

信号处理函数
void signalHandler(int signal) {
    for (int i = 0; i < s_fatal_signal_num; ++i) {
        if (signal == s_fatal_signals[i]) {
            NSLog(@"exit with signal: %s", s_fatal_signal_names[i]);
            NSLog(@"%@", [AppDelegate backtrace]);
            break;
        }
    }
}

注册捕获信号的方法,启动的时候调用
void InitCrashReport() {
    // linux错误信号捕获
    for (int i = 0; i < s_fatal_signal_num; ++i) {
        signal(s_fatal_signals[i], signalHandler);
    }
}

分享到:
评论

相关推荐

    iOS捕获程序异常崩溃记录、App信息等

    通过创建自定义的崩溃捕获机制,并将相关信息上传至服务器,我们可以获取详细的崩溃日志和系统信息,从而更好地诊断和解决错误。 首先,ZWCrashCatch.h和ZWCrashCatch.mm是两个关键的源代码文件,它们可能包含了...

    ios-iOS捕获崩溃日志.zip

    "ios-iOS捕获崩溃日志.zip"这个压缩包提供了相关的解决方案,尤其是对于Swift项目。 首先,描述中提到的Swift扩展库——ZCategoryTool,是由CoderZCC开发的一个开源工具,它支持通过CocoaPods进行集成。CocoaPods是...

    iOS异常捕获和崩溃日志

    总结来说,iOS异常捕获和崩溃日志处理是提升应用质量不可或缺的环节。利用如ZFJUncaughtExceptionHandler这样的工具,可以有效地记录和分析崩溃信息,从而快速定位和修复问题,提供更稳定的用户体验。对于开发者而言...

    iOS崩溃日志收集

    以下是关于iOS崩溃日志收集的详细知识点: 1. **崩溃日志概述**:崩溃日志是iOS系统在应用异常退出时记录的一系列信息,主要包括应用崩溃时的堆栈信息、系统状态、设备信息等。这些信息对于诊断和解决运行时错误至...

    IOS 异常崩溃时发送邮件

    "IOS 异常崩溃时发送邮件"这个主题正是关于如何在iOS应用出现异常时,自动捕获异常信息并通过电子邮件发送到指定地址,以便于调试。 首先,我们需要了解`NSSetUncaughtExceptionHandler`这个函数。它是Objective-C...

    iOS程序异常crash捕获与拦截

    在iOS开发过程中,程序异常崩溃(crash)是开发者经常遇到的问题。为了提供稳定的应用体验,了解并掌握如何捕获和拦截这些异常至关重要。本文将深入探讨iOS程序异常crash的捕获与拦截机制,以及如何通过源码和工具来...

    iOS系统崩溃捕获,异常处理模块.zip

    操作系统:LInux、IOS、树莓派、安卓开发、微机操作系统、网络操作系统、分布式操作系统等。此外,还有嵌入式操作系统、智能操作系统等。 网络与通信:数据传输、信号处理、网络协议、网络与通信硬件、网络安全网络...

    swift-XXShield实现防止iOSAPPCrash和捕获异常状态下的崩溃信息

    Swift-XXShield是一个专门针对Swift语言设计的框架,用于实现防止iOS APP崩溃并捕获异常状态下的崩溃信息。这个框架可以帮助开发者构建更健壮的应用,及时发现和处理可能导致崩溃的问题,从而有效降低APP的Crash率。...

    swift-iOS崩溃日志收集与发送服务器

    1. **理解崩溃日志**:iOS崩溃日志通常包含了应用程序崩溃时的堆栈跟踪信息,这些信息包括出错的函数、行号以及可能的异常类型。通过分析这些日志,开发者可以得知哪个代码块导致了问题。 2. **使用Swift的异常处理...

    iOS防止崩溃

    为了防止iOS应用崩溃并提供良好的用户体验,开发者需要采取一系列策略和工具来捕获、分析和解决可能导致崩溃的问题。下面将详细讨论如何在iOS应用中实施这些方法。 首先,了解崩溃的原因至关重要。iOS应用崩溃通常...

    iOS简单版防崩溃处理

    "iOS简单版防崩溃处理"这一主题主要关注如何预防常见的编程错误导致的应用程序崩溃,如数组越界和非主线程更新用户界面(UI)。以下是对这些关键知识点的详细说明: 1. **数组越界**: 在Objective-C或Swift中,...

    iOS 拦截奔溃 使程序不在崩溃

    除了上述方法,还有一些第三方库,如`AvoidCrash`(与压缩包中的文件名相吻合),提供了更方便的崩溃拦截和处理功能。这些库通常会自动捕获常见的异常,提供统一的日志记录和上报机制,使得开发者能够更快地定位和...

    iOS开发异常捕获上传至邮箱

    在iOS应用开发中,异常捕获是至关重要的一个环节,它可以帮助开发者在程序崩溃时获取必要的信息,以便分析和修复问题。"iOS开发异常捕获上传至邮箱"这个标题所涉及的知识点主要涵盖如何在iOS应用程序中实现异常监控...

    iOS中捕获日志与异常示例详解

    iOS中捕获日志与异常示例详解 iOS 中捕获日志与异常示例详解是 iOS 开发中一个非常重要的环节。在日常的工作中,日志是不可缺少的一个环节,它可以帮助开发者们更好地 debug 和优化应用程序的性能。在这篇文章中,...

    iOS Crash日志收集上报

    iOS Crash日志收集上报是指在iOS系统中,收集和上报应用程序崩溃日志的过程。该过程涉及到多个技术层面,包括Mach异常、Unix Signal、NSException等。 一、Mach异常 Mach异常是最底层的内核级异常,是指在iOS系统...

    程序崩溃异常捕获

    在实际应用中,为了提高用户体验,还可以结合崩溃报告库,如Android的ACRA(Application Crash Report for Android)或iOS的Fabric的Crashlytics,它们提供了一套完整的异常捕获、本地存储、上传和分析的解决方案。...

    iOS 捕获程序崩溃日志

    在iOS开发过程中,捕获程序崩溃日志是至关重要的,因为这些日志能帮助开发者定位问题,修复应用程序中的错误。当iOS应用发生崩溃时,系统会自动记录一系列信息,包括异常类型、崩溃原因以及调用栈信息。这些信息是...

    iOS 异常捕捉及处理发送。ExceptionHandler.

    在iOS开发中,异常捕捉和处理是至关重要的,因为它能够帮助开发者及时发现并解决应用程序运行时出现的问题。`ExceptionHandler`通常是...同时,合理的异常处理策略也能提升用户体验,避免因程序崩溃而让用户感到困扰。

    ios Crash异常捕捉demo

    `ios Crash异常捕捉demo`是一个实例,专门针对`NSException`异常的捕获,旨在帮助开发者预防和处理应用程序中的崩溃问题。`SIGABRT`是一种常见的信号,通常与程序异常终止相关联,尤其是在Objective-C中遇到未捕获的...

    unity 捕捉异常和移动设备崩溃Android

    2. HockeyApp:由微软提供,适用于iOS和Android,支持用户反馈和崩溃报告。 3. Unity Analytics:Unity官方的分析服务,除了基本的崩溃报告,还提供用户行为分析。 五、自定义异常处理系统 开发者也可以创建自定义...

Global site tag (gtag.js) - Google Analytics