iOS 中捕获程序崩溃日志

iOS开发中遇到程序崩溃是很正常的事情,如何在程序崩溃时捕获到异常信息并通知开发者,是大多数软件都选择的方法。下面就介绍如何在iOS中实现:

1. 在程序启动时加上一个异常捕获监听,用来处理程序崩溃时的回调动作
  NSSetUncaughtExceptionHandler (&UncaughtExceptionHandler);
  官方文档介绍:Sets the top-level error-handling function where you can perform last-minute logging before the program terminates.
  UncaughtExceptionHandler是一个函数指针,该函数需要我们实现,可以取自己想要的名字。当程序发生异常崩溃时,该函数会得到调用,这跟C,C++中的回调函数的概念是一样的。

2. 实现自己的处理函数
void UncaughtExceptionHandler(NSException *exception) {
    NSArray *arr = [exception callStackSymbols];//得到当前调用栈信息
    NSString *reason = [exception reason];//非常重要,就是崩溃的原因
    NSString *name = [exception name];//异常类型
   
    NSLog(@"exception type : %@ \n crash reason : %@ \n call stack info : %@", name, reason, arr);
}

以上代码很简单,但是带来的作用是非常大的。

获取到了崩溃的日子,如何发送给开发者呢,目前一般有以下两种方式:
1. 将崩溃信息持久化在本地,下次程序启动时,将崩溃信息作为日志发送给开发者。

2. 通过邮件发送给开发者。 不过此种方式需要得到用户的许可,因为iOS不能后台发送短信或者邮件,会弹出发送邮件的界面,只有用户点击了发送才可发送。 不过,此种方式最符合苹果的以用户至上的原则。
发送邮件代码也很简单:
 NSString *crashLogInfo = [NSString stringWithFormat:@"exception type : %@ \n crash reason : %@ \n call stack info : %@", name, reason, arr];
    NSString *urlStr = [NSString stringWithFormat:@"mailto://[email protected]?subject=bug报告&body=感谢您的配合!

"
                        "错误详情:%@",
                        crashLogInfo];
    NSURL *url = [NSURL URLWithString:[urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
    [[UIApplication sharedApplication] openURL:url];

以上就是iOS中捕获异常常用的方法,大家可以不妨一试!

时间: 2024-08-08 09:42:39

iOS 中捕获程序崩溃日志的相关文章

iOS开发-捕获程序崩溃日志

iOS开发中遇到程序崩溃是很正常的事情,如何在程序崩溃时捕获到异常信息并通知开发者? 下面就介绍如何在iOS中实现: 1. 在程序启动时加上一个异常捕获监听,用来处理程序崩溃时的回调动作 1 NSSetUncaughtExceptionHandler (&UncaughtExceptionHandler); 官方文档介绍:Sets the top-level error-handling function where you can perform last-minute logging bef

捕获android程序崩溃日志

主要类: package com.example.callstatus; import java.io.File; import java.io.FileOutputStream; import java.io.PrintWriter; import java.io.StringWriter; import java.lang.Thread.UncaughtExceptionHandler; import java.lang.reflect.Field; import java.net.Unkn

iOS-捕获应用程序崩溃日志

作为一名iOS移动应用开发者,为了确保你的应用程序正确无误,在将应用程序提交到应用商店之前,你必定会进行大量的测试工作:而且在你测试的过程中应用程序运行的很好,但是在应用商店上线之后,还是有用户抱怨应用程序会"闪退"!现在作为应用程序的开发人员你肯定会准备打开代码准备修复"闪退"的问题,但是就在这个时候你会发现,到底那段代码?那个地方的问题呢......:这个时候iOS崩溃日志就派上用场了,那么现在我们就来研究怎么获取应用崩溃的日志,以及从日志追踪到代码. (一)什

iOS中debug调试输出日志

在.pch中写: #ifdef DEBUG  // 调试阶段 #define CXSLog(...) NSLog(__VA_ARGS__) #else // 发布阶段 #define CXSLog (...) #endif iOS中debug调试输出日志,布布扣,bubuko.com

ios中的奇怪崩溃Signal和EXC_BAD_ACCESS错误分析

什么是Signal 在计算机科学中,信号(英语:Signals)是Unix.类Unix以及其他POSIX兼容的操作系统中进程间通讯的一种有限制的方式.它是一种异步的通知机制,用来提醒进程一个事件已经发生.当一个信号发送给一个进程,操作系统中断了进程正常的控制流程,此时,任何非原子操作都将被中断.如果进程定义了信号的处理函数,那么它将被执行,否则就执行默认的处理函数. 在iOS中就是未被捕获的Objective-C异常(NSException),导致程序向自身发送了SIGABRT信号而崩溃. Si

iOS Crash 分析 符号化崩溃日志

参考: http://blog.csdn.net/diyagoanyhacker/article/details/41247367 http://blog.csdn.net/diyagoanyhacker/article/details/41247389 http://blog.csdn.net/diyagoanyhacker/article/details/41247411 http://www.cnblogs.com/smileEvday/p/Crash1.html 未符号化的崩溃日志就象一

iOS中 iOS10 权限崩溃问题 韩俊强的CSDN博客

iOS10 权限崩溃问题 每日更新关注:http://weibo.com/hanjunqiang  新浪微博! 今天 手机升级了 iOS10 Beta,然后用正在开发的项目 装了个ipa包,发现点击有关 权限访问 直接Crash了,并在控制台输出了一些信息: This app has crashed because it attempted to access privacy-sensitive data without a usage description.  The app's Info.

iOS中打印系统详细日志

Q:如何打印当前的函数和行号? A:我们可以在打印时使用一些预编译宏作为打印参数,来打印当前的函数和行号.如: 1 NSLog(@"%s:%d obj=%@", __func__, __LINE__, obj); 其中__func__和__LINE__都是预编译的宏,编译时会分别替换为当前函数和当前行号. 下面是一些常用于打印日志的宏. 宏 说明 __func__ 打印当前函数或方法,c字符串 __LINE__ 打印当前行号,整数 __FILE__ 打印当前文件路径,c字符串 __PR

iOS 友盟统计崩溃日志查询

1.在Finder中找到你打出去的那个包,YourAppName.xcarchive. 2.然后Show Package Contents,在dSYMs 和 Products文件夹内找到这两个文件:YourAppName, YourAppName.app.dSYM 3.把这两个文件放到一个文件夹内,在终端进入该位置. 4.根据友盟统计上的错误分析,输入相应的如下命令行即可定位到出错内容: atos -arch armv7 -o YourAppName.app/YourAppName 0x306d