移除 crash 上报事件
review by days
Showing
5 changed files
with
7 additions
and
170 deletions
@@ -75,6 +75,7 @@ | @@ -75,6 +75,7 @@ | ||
75 | E7B8DE5E1A836F8700102CC4 /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E7B8DE5D1A836F8700102CC4 /* CoreTelephony.framework */; }; | 75 | E7B8DE5E1A836F8700102CC4 /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E7B8DE5D1A836F8700102CC4 /* CoreTelephony.framework */; }; |
76 | E7B8DE621A838EC200102CC4 /* AdSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E7B8DE611A838EC200102CC4 /* AdSupport.framework */; }; | 76 | E7B8DE621A838EC200102CC4 /* AdSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E7B8DE611A838EC200102CC4 /* AdSupport.framework */; }; |
77 | E7E3A1871BF098DA006A9266 /* AFHTTPRequestOperationManager+YHPriorityRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = E7E3A1861BF098DA006A9266 /* AFHTTPRequestOperationManager+YHPriorityRequest.m */; }; | 77 | E7E3A1871BF098DA006A9266 /* AFHTTPRequestOperationManager+YHPriorityRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = E7E3A1861BF098DA006A9266 /* AFHTTPRequestOperationManager+YHPriorityRequest.m */; }; |
78 | + F98D9182202304580054070B /* YHPatch.m in Sources */ = {isa = PBXBuildFile; fileRef = F98D9181202304580054070B /* YHPatch.m */; }; | ||
78 | /* End PBXBuildFile section */ | 79 | /* End PBXBuildFile section */ |
79 | 80 | ||
80 | /* Begin PBXContainerItemProxy section */ | 81 | /* Begin PBXContainerItemProxy section */ |
@@ -228,6 +229,8 @@ | @@ -228,6 +229,8 @@ | ||
228 | E7B8DE611A838EC200102CC4 /* AdSupport.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AdSupport.framework; path = System/Library/Frameworks/AdSupport.framework; sourceTree = SDKROOT; }; | 229 | E7B8DE611A838EC200102CC4 /* AdSupport.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AdSupport.framework; path = System/Library/Frameworks/AdSupport.framework; sourceTree = SDKROOT; }; |
229 | E7E3A1851BF098DA006A9266 /* AFHTTPRequestOperationManager+YHPriorityRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "AFHTTPRequestOperationManager+YHPriorityRequest.h"; sourceTree = "<group>"; }; | 230 | E7E3A1851BF098DA006A9266 /* AFHTTPRequestOperationManager+YHPriorityRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "AFHTTPRequestOperationManager+YHPriorityRequest.h"; sourceTree = "<group>"; }; |
230 | E7E3A1861BF098DA006A9266 /* AFHTTPRequestOperationManager+YHPriorityRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "AFHTTPRequestOperationManager+YHPriorityRequest.m"; sourceTree = "<group>"; }; | 231 | E7E3A1861BF098DA006A9266 /* AFHTTPRequestOperationManager+YHPriorityRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "AFHTTPRequestOperationManager+YHPriorityRequest.m"; sourceTree = "<group>"; }; |
232 | + F98D9181202304580054070B /* YHPatch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YHPatch.m; sourceTree = "<group>"; }; | ||
233 | + F98D9183202304650054070B /* YHPatch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YHPatch.h; sourceTree = "<group>"; }; | ||
231 | /* End PBXFileReference section */ | 234 | /* End PBXFileReference section */ |
232 | 235 | ||
233 | /* Begin PBXFrameworksBuildPhase section */ | 236 | /* Begin PBXFrameworksBuildPhase section */ |
@@ -463,6 +466,8 @@ | @@ -463,6 +466,8 @@ | ||
463 | E7ADAE321AB946C100C9DD0B /* Model */ = { | 466 | E7ADAE321AB946C100C9DD0B /* Model */ = { |
464 | isa = PBXGroup; | 467 | isa = PBXGroup; |
465 | children = ( | 468 | children = ( |
469 | + F98D9183202304650054070B /* YHPatch.h */, | ||
470 | + F98D9181202304580054070B /* YHPatch.m */, | ||
466 | E7ADAE331AB946C100C9DD0B /* YHDevice.h */, | 471 | E7ADAE331AB946C100C9DD0B /* YHDevice.h */, |
467 | E7ADAE341AB946C100C9DD0B /* YHDevice.m */, | 472 | E7ADAE341AB946C100C9DD0B /* YHDevice.m */, |
468 | E7ADAE351AB946C100C9DD0B /* YHError.h */, | 473 | E7ADAE351AB946C100C9DD0B /* YHError.h */, |
@@ -693,6 +698,7 @@ | @@ -693,6 +698,7 @@ | ||
693 | E7A908731BB3C4B000E2EA39 /* YHPerformance.m in Sources */, | 698 | E7A908731BB3C4B000E2EA39 /* YHPerformance.m in Sources */, |
694 | E7ADAE3B1AB946C100C9DD0B /* YHDevice.m in Sources */, | 699 | E7ADAE3B1AB946C100C9DD0B /* YHDevice.m in Sources */, |
695 | E79828121AA6A5120035137C /* YH_KeychainStore.m in Sources */, | 700 | E79828121AA6A5120035137C /* YH_KeychainStore.m in Sources */, |
701 | + F98D9182202304580054070B /* YHPatch.m in Sources */, | ||
696 | 194EDC761A7F52D100421E6C /* main.m in Sources */, | 702 | 194EDC761A7F52D100421E6C /* main.m in Sources */, |
697 | E7ADAE5B1AB95BC800C9DD0B /* YHAssemblyAssistant.m in Sources */, | 703 | E7ADAE5B1AB95BC800C9DD0B /* YHAssemblyAssistant.m in Sources */, |
698 | E7ADAE3C1AB946C100C9DD0B /* YHError.m in Sources */, | 704 | E7ADAE3C1AB946C100C9DD0B /* YHError.m in Sources */, |
1 | -// | ||
2 | -// YHCrashReporter.h | ||
3 | -// YH_Analytics | ||
4 | -// | ||
5 | -// Created by 王钱钧 on 15/2/4. | ||
6 | -// Copyright (c) 2015年 YOHO. All rights reserved. | ||
7 | - | ||
8 | -// 负责crash信息收集 | ||
9 | - | ||
10 | -#import <Foundation/Foundation.h> | ||
11 | - | ||
12 | -@interface YHCrashReporter : NSObject | ||
13 | - | ||
14 | -+ (YHCrashReporter *)sharedInstance; | ||
15 | - | ||
16 | -- (NSArray *)callstackAsArray; | ||
17 | - | ||
18 | -- (void)handleSignal:(NSDictionary *)userInfo; | ||
19 | - | ||
20 | -- (void)handleNSException:(NSDictionary *)userInfo; | ||
21 | - | ||
22 | -@end |
1 | -// | ||
2 | -// YHCrashReporter.m | ||
3 | -// YH_Analytics | ||
4 | -// | ||
5 | -// Created by 王钱钧 on 15/2/4. | ||
6 | -// Copyright (c) 2015年 YOHO. All rights reserved. | ||
7 | -// | ||
8 | - | ||
9 | -#import "YHCrashReporter.h" | ||
10 | -#import "YH_Analytics.h" | ||
11 | -#import "YHError.h" | ||
12 | -#include <signal.h> | ||
13 | -#include <execinfo.h> | ||
14 | - | ||
15 | -#pragma mark - C Fuctions | ||
16 | - | ||
17 | -void sighandler(int signal) | ||
18 | -{ | ||
19 | - const char* names[NSIG]; | ||
20 | - names[SIGABRT] = "SIGABRT"; | ||
21 | - names[SIGBUS] = "SIGBUS"; | ||
22 | - names[SIGFPE] = "SIGFPE"; | ||
23 | - names[SIGILL] = "SIGILL"; | ||
24 | - names[SIGPIPE] = "SIGPIPE"; | ||
25 | - names[SIGSEGV] = "SIGSEGV"; | ||
26 | - | ||
27 | - YHCrashReporter *crash = [YHCrashReporter sharedInstance]; | ||
28 | - | ||
29 | - NSArray *arr = [crash callstackAsArray]; | ||
30 | - NSDictionary *userInfo = @{ | ||
31 | - JsonKeyCrashCallstack : arr, | ||
32 | - JsonKeyCrashSignal : @(signal), | ||
33 | - JsonKeyCrashSignalName : [NSString stringWithUTF8String:names[signal]], | ||
34 | - }; | ||
35 | - [crash performSelectorOnMainThread:@selector(handleSignal:) withObject:userInfo waitUntilDone:YES]; | ||
36 | -} | ||
37 | - | ||
38 | -void uncaughtCrashExceptionHandler(NSException *exception) | ||
39 | -{ | ||
40 | - YHCrashReporter *crash = [YHCrashReporter sharedInstance]; | ||
41 | - | ||
42 | - NSArray *arr = [exception callStackSymbols]; | ||
43 | - NSDictionary *userInfo = @{ | ||
44 | - JsonKeyCrashCallstack : arr, | ||
45 | - JsonKeyCrashExceptionName : exception.name, | ||
46 | - JsonKeyCrashExceptionReason : exception.reason, | ||
47 | - }; | ||
48 | - [crash performSelectorOnMainThread:@selector(handleNSException:) withObject:userInfo waitUntilDone:YES]; | ||
49 | -} | ||
50 | - | ||
51 | - | ||
52 | -@implementation YHCrashReporter | ||
53 | - | ||
54 | - | ||
55 | -+ (YHCrashReporter *)sharedInstance | ||
56 | -{ | ||
57 | - static YHCrashReporter *sharedInstance = nil; | ||
58 | - | ||
59 | - static dispatch_once_t onceToken; | ||
60 | - dispatch_once(&onceToken, ^{ | ||
61 | - sharedInstance = [[YHCrashReporter alloc] init]; | ||
62 | - }); | ||
63 | - | ||
64 | - return sharedInstance; | ||
65 | -} | ||
66 | - | ||
67 | -#pragma mark - Lifetime methods | ||
68 | - | ||
69 | -- (id)init | ||
70 | -{ | ||
71 | - self = [super init]; | ||
72 | - if (self) { | ||
73 | - signal(SIGABRT, sighandler); | ||
74 | - signal(SIGBUS, sighandler); | ||
75 | - signal(SIGFPE, sighandler); | ||
76 | - signal(SIGILL, sighandler); | ||
77 | - signal(SIGPIPE, sighandler); | ||
78 | - signal(SIGSEGV, sighandler); | ||
79 | - | ||
80 | - NSSetUncaughtExceptionHandler(&uncaughtCrashExceptionHandler); | ||
81 | - } | ||
82 | - | ||
83 | - return self; | ||
84 | -} | ||
85 | - | ||
86 | -- (void)dealloc | ||
87 | -{ | ||
88 | - signal(SIGABRT, SIG_DFL); | ||
89 | - signal(SIGBUS, SIG_DFL); | ||
90 | - signal(SIGFPE, SIG_DFL); | ||
91 | - signal(SIGILL, SIG_DFL); | ||
92 | - signal(SIGPIPE, SIG_DFL); | ||
93 | - signal(SIGSEGV, SIG_DFL); | ||
94 | - | ||
95 | - NSSetUncaughtExceptionHandler(NULL); | ||
96 | -} | ||
97 | - | ||
98 | -#pragma mark - methods | ||
99 | - | ||
100 | -- (NSArray *)callstackAsArray | ||
101 | -{ | ||
102 | - void *callstack[128]; | ||
103 | - const int numFrams = backtrace(callstack, 128); | ||
104 | - char **symbols = backtrace_symbols(callstack, numFrams); | ||
105 | - | ||
106 | - NSMutableArray *arr = [NSMutableArray arrayWithCapacity:numFrams]; | ||
107 | - for (int i = 0; i < numFrams; i++) { | ||
108 | - [arr addObject:[NSString stringWithUTF8String:symbols[i]]]; | ||
109 | - } | ||
110 | - | ||
111 | - free(symbols); | ||
112 | - | ||
113 | - return arr; | ||
114 | -} | ||
115 | - | ||
116 | -- (void)handleSignal:(NSDictionary*)userInfo | ||
117 | -{ | ||
118 | - YALog(@"crash============:\n%@", userInfo); | ||
119 | - if (!userInfo || ![userInfo isKindOfClass:[NSDictionary class]]) { | ||
120 | - return; | ||
121 | - } | ||
122 | - | ||
123 | - [[YH_Analytics sharedInstance] logError:kErrorTypeCrash parameters:@{ JsonKeyErrorST: userInfo}]; | ||
124 | -} | ||
125 | - | ||
126 | -- (void)handleNSException:(NSDictionary*)userInfo | ||
127 | -{ | ||
128 | - YALog(@"crash============:\n%@", userInfo); | ||
129 | - if (!userInfo || ![userInfo isKindOfClass:[NSDictionary class]]) { | ||
130 | - return; | ||
131 | - } | ||
132 | - | ||
133 | - [[YH_Analytics sharedInstance] logError:kErrorTypeCrash parameters:@{ JsonKeyErrorST: userInfo}]; | ||
134 | -} | ||
135 | - | ||
136 | -@end |
@@ -13,7 +13,6 @@ | @@ -13,7 +13,6 @@ | ||
13 | #import "YHAnalyticsMacro.h" | 13 | #import "YHAnalyticsMacro.h" |
14 | #import "YH_Analytics.h" | 14 | #import "YH_Analytics.h" |
15 | #import "NSString+YHAnalytics.h" | 15 | #import "NSString+YHAnalytics.h" |
16 | -#import "YHCrashReporter.h" | ||
17 | #import "YHAssemblyAssistant.h" | 16 | #import "YHAssemblyAssistant.h" |
18 | #import "OpenUDID.h" | 17 | #import "OpenUDID.h" |
19 | #import "YHError.h" | 18 | #import "YHError.h" |
@@ -62,7 +61,6 @@ | @@ -62,7 +61,6 @@ | ||
62 | 61 | ||
63 | 62 | ||
64 | - (NSString *)timestamp; | 63 | - (NSString *)timestamp; |
65 | -- (void)registerCrashReporter; | ||
66 | - (void)registerAppWillEnterForegroundNotification; | 64 | - (void)registerAppWillEnterForegroundNotification; |
67 | - (void)resetSession; | 65 | - (void)resetSession; |
68 | - (void)uploadDiskData; | 66 | - (void)uploadDiskData; |
@@ -142,13 +140,6 @@ | @@ -142,13 +140,6 @@ | ||
142 | 140 | ||
143 | #pragma mark - Private Method | 141 | #pragma mark - Private Method |
144 | 142 | ||
145 | -- (void)registerCrashReporter | ||
146 | -{ | ||
147 | - if (self.enableExceptionLog) { | ||
148 | - [YHCrashReporter sharedInstance]; | ||
149 | - } | ||
150 | -} | ||
151 | - | ||
152 | - (void)registerAppWillEnterForegroundNotification | 143 | - (void)registerAppWillEnterForegroundNotification |
153 | { | 144 | { |
154 | // 当程序切换到后台,重置session 和 eventIndex | 145 | // 当程序切换到后台,重置session 和 eventIndex |
@@ -213,8 +204,6 @@ | @@ -213,8 +204,6 @@ | ||
213 | 204 | ||
214 | [[YHAssemblyAssistant sharedInstance] prepareImmediUploadDic:appId sessionId:self.session channelId:self.channelId]; | 205 | [[YHAssemblyAssistant sharedInstance] prepareImmediUploadDic:appId sessionId:self.session channelId:self.channelId]; |
215 | 206 | ||
216 | - [self registerCrashReporter]; | ||
217 | - | ||
218 | [self registerAppWillEnterForegroundNotification]; | 207 | [self registerAppWillEnterForegroundNotification]; |
219 | 208 | ||
220 | /* | 209 | /* |
-
Please register or login to post a comment