2013年4月份整理的代码,仅作记录:
//先宏定义
//发布和未发布状态的日志切换
#ifdef DEBUG
//异常栈开关
#define STACK_KEY YES
//日志重定向开关
#define STDERR_KEY NO
//调试日志
#define DebugLog(format,...) NSLog(@"{%s,%d}" format, __FUNCTION__,__LINE__,##__VA_ARGS__)
//异常栈日志
#define StackLog(format,...) NSLog(@"{%s,%d}" format, __FUNCTION__,__LINE__,##__VA_ARGS__)
//输出日至
#define DLOG(...) NSLog(__VA_ARGS__)
//输出详细日志
#define DLOGEXT(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
//输出调用
#define DLOGCALL DLOG(@"[%@ %@]", NSStringFromClass([self class]), NSStringFromSelector(_cmd))
//输出方法
#define DLOGMETHODNSLog(@"[%s] %@", class_getName([self class]), NSStringFromSelector(_cmd));
//输出点
#define DLOGPOINT(p)NSLog(@"%f,%f", p.x, p.y);
//输出大小
#define DLOGSIZE(p)NSLog(@"%f,%f", p.width, p.height);
//输出矩形
#define DLOGRECT(p)NSLog(@"%f,%f %f,%f", p.origin.x, p.origin.y, p.size.width, p.size.height);
#else
#define STACK_KEY YES
#define STDERR_KEY YES
#define DebugLog(format,...)
#define StackLog(format,...)
#define DLOG(...)
#define DLOGEXT(...)
#define DLOGCALL
#define DLOGMETHOD
#define DLOGPOINT(p)
#define DLOGSIZE(p)
#define DLOGRECT(p)
#endif
AppDelegate的- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions中加入以下代码:
//设置异常日志文件
if (STDERR_KEY) {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentDir = [paths objectAtIndex:0];
NSString *decyStr = [NSString stringWithFormat:@"decrypt.log"];
NSString *logPath = [documentDir stringByAppendingPathComponent:decyStr];
freopen([logPath cStringUsingEncoding:NSASCIIStringEncoding], "w+", stderr);
}
//异常栈
if (STACK_KEY) {
//设置处理异常的Handler
NSSetUncaughtExceptionHandler(&UncaughtExceptionHandler);
//signal处理机制
struct sigaction mySigAction;
mySigAction.sa_sigaction = stacktrace;
mySigAction.sa_flags = SA_SIGINFO;
sigemptyset(&mySigAction.sa_mask);
sigaction(SIGQUIT, &mySigAction, NULL);
sigaction(SIGILL , &mySigAction, NULL);
sigaction(SIGTRAP, &mySigAction, NULL);
sigaction(SIGABRT, &mySigAction, NULL);
sigaction(SIGEMT , &mySigAction, NULL);
sigaction(SIGFPE , &mySigAction, NULL);
sigaction(SIGBUS , &mySigAction, NULL);
sigaction(SIGSEGV, &mySigAction, NULL);
sigaction(SIGSYS , &mySigAction, NULL);
sigaction(SIGPIPE, &mySigAction, NULL);
sigaction(SIGALRM, &mySigAction, NULL);
sigaction(SIGXCPU, &mySigAction, NULL);
sigaction(SIGXFSZ, &mySigAction, NULL);
}
//异常处理
#pragma mark - DebugMethods
void UncaughtExceptionHandler(NSException *exception) {
StackLog(@"receive a UncaughtExceptionHandler");
NSArray *arr = [exception callStackSymbols];
NSString *reason = [exception reason];
NSString *name = [exception name];
NSString *syserror = [NSStringstringWithFormat:@"UncaughtExceptionHandlerName:%@\nUncaughtExceptionHandlerReason:%@\nUncaughtExceptionHandlerArray:%@",name, reason, arr];
StackLog(@"%@", syserror);
}
void stacktrace(int sig, siginfo_t *info, void *context)
{
NSMutableString * mstr = [[[NSMutableStringalloc] initWithCapacity:0] autorelease];
[mstr appendString:@"Stack:\n"];
StackLog(@"sig %d",sig);
void* callstack[128];
int i, frameCount = backtrace(callstack, 128);
char** strs = backtrace_symbols(callstack, frameCount);
for (i = 0; i < frameCount; ++i) {
[mstr appendFormat:@"%s\n", strs[i]];
}
StackLog(@"Stack Trace:\r\n%@", mstr);
}
- iOS异常捕获
文章目录 一. 系统Crash 二. 处理signal 下面是一些信号说明 关键点注意 三. 实战 四. Crash Callstack分析 – 进⼀一步分析 五. demo地址 六. 参考文献 前言 ...
- ios 异常捕获
@try { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate c ...
- iOS开发-捕获程序崩溃日志
iOS开发中遇到程序崩溃是很正常的事情,如何在程序崩溃时捕获到异常信息并通知开发者,是大多数软件都选择的方法.下面就介绍如何在iOS中实现: 1. 在程序启动时加上一个异常捕获监听,用来处理程序崩溃时 ...
- iOS 中捕获程序崩溃日志
iOS 中捕获程序崩溃日志 (2014-04-22 17:35:59) 转载▼ iOS开发中遇到程序崩溃是很正常的事情,如何在程序崩溃时捕获到异常信息并通知开发者,是大多数软件都选择的方法.下 ...
- Ionic2中腾讯Bugly异常捕获以及上报
Ionic2混合开发,入坑系列:Ionic2中腾讯Bugly异常捕获以及上报 1.Ionic2中处理全局异常,直接继承IonicErrorHandler即可,代码如下 import { IonicEr ...
- iOS 中捕获程序崩溃日志 (2014-04-22 17:35:59)
http://blog.sina.com.cn/s/blog_b71d24920101ky2d.html iOS开发中遇到程序崩溃是很正常的事情,如何在程序崩溃时捕获到异常信息并通知开发者,是大多数软 ...
- 使用lua实现try-catch异常捕获
lua原生并没有提供try-catch的语法来捕获异常处理,但是提供了pcall/xpcall等接口,可在保护模式下执行lua函数. 因此,可以通过封装这两个接口,来实现try-catch块的捕获机制 ...
- iOS异常采用处理方式
iOS开发过程中我们经常会遇到异常问题 对异常的处理一般采用打印或者直接抛出.这样可以很方便我们调试过程有所参考,而且方便我们查看异常产生的位置信息 NSError(错误信息) 采用NSError的情 ...
- .NET 基础 一步步 一幕幕[数组、集合、异常捕获]
数组.集合.异常捕获 数组: 一次性存储多个相同类型的变量. 一维数组: 语法: 数组类型[] 数组名=new 数组类型[数组长度]; 声明数组的语法: A.数据类型 [] 数组名称= new 数据类 ...
随机推荐
- [C++]类成员返回语句 return *this 的理解
经常会在类似 copy-assignment 的成员函数看到返回语句 return *this ,这类函数通常返回类型是所属类的引用. 类成员函数的隐式指针 class *this const 经过 ...
- iview-admin安装
桌面创建project文件夹. 文件夹内右键选择gitbash here,输入git init.文件夹内会生成.git文件夹. 再输入git config --global user.name &qu ...
- 浅入深出Vue:环境搭建
浅入深出Vue:环境搭建 工欲善其事必先利其器,该搭建我们的环境了. 安装NPM 所有工具的下载地址都可以在导航篇中找到,这里我们下载的是最新版本的NodeJS Windows安装程序 下载下来后,直 ...
- 【题解】狼抓兔子—BZOJ1001。
(胡扯时间)今天炒鸡无聊就打算BZOJ开始从第一道题开始顺着打,这样未来一段时间内也就有事干了.结果发现A+B切掉后就遭遇了一个"小小"的瓶颈(真不友好. 好了说题说题.看题第一眼 ...
- js的splice方法
splice是js原生处理数组的方法,可以在不改变引用的情况下对数组处理 arrayObject.splice(index,howmany,item1,.....,itemX)参数 描述index 必 ...
- iTOP-4412/4418/6818开发板-fastboot烧写脚本
在 iTOP-4412,4418,6818 开发板烧写的时候,使用的是 fastboot 工具. fastboot 工具需要在 cmd.exe 中调用,每次都需要输入烧写命令,这样步骤有点多.在程序员 ...
- 好奇,项目根目录下的.editorconfig文件
一..editorconfig文件是什么? 在项目里,大多时候都能看到.editorconfig文件,刚开始总是忽视掉它,认为它不太重要.但是,它的存在,必定有它的理由,于是,抽空来研究一下,它是什么 ...
- Loading class `com.mysql.jdbc.Driver'. The new driver class is `com.mysql.cj.jdb 问题
是因为最新的数据库驱动的原因,用较早的版本就可以了. <dependency> <groupId>mysql</groupId> <artifactId> ...
- TypeError: softmax() got an unexpected keyword argument 'axis'
出现这个问题,有几种解决办法,可以调低一下keras的版本,比如: pip install keras==2.1 不过还有个更方便的方法,从错误可知softmax中不包含axis这个参数,那么把axi ...
- 示波器X1探头和X10探头
示波器探头有X1和X10档,当测量一个信号时应该如何选择? 1.先我们看它们的区别? X1档,表示信号没有经过衰减进入示波器 X10档,表示信号衰减10倍进入示波器(当示波器也设置为X10档,直接读数 ...