iOS已發布應用中對異常資訊捕獲和處理

2021-06-06 23:23:43 字數 3079 閱讀 1531

ios開發中我們會遇到程式丟擲異常退出的情況,如果是在除錯的過程中,異常的資訊是一目了然,但是如果是在已經發布的程式中,獲取異常的資訊有時候是比較困難的。

ios提供了異常發生的處理api,我們在程式啟動的時候可以新增這樣的handler,這樣的程式發生異常的時候就可以對這一部分的資訊進行必要的處理,適時的反饋給開發者。

不足的地方是,並不是所有的程式崩潰都是由於發生可以捕捉的異常的,有些時候是因為記憶體等一些其他的錯誤導致程式的崩潰,這樣的資訊是不在這裡體現的

其實還有很多的處理的辦法。

l  比如可以在程式下一次起來的時候讀取這個異常檔案發生到服務端。

l  或者直接就是在處理**中用openurl的方式(mailto:)呼叫傳送郵件的方式,將異常資訊直接變成郵件傳送到指定位址。

以下是完整的**實現。

使用場景示例:

#pragma mark -

[window makekeyandvisible];

[nduncaughtexceptionhandler setdefaulthandler];

nslog(@"%@", [array objectatindex:1]);

return yes;

基本介面展示:

#import

@inte***ce nduncaughtexceptionhandler : nsobject

+ (void)setdefaulthandler;

+ (nsuncaughtexceptionhandler*)gethandler;

@end

//還可以選擇設定自定義的handler,讓使用者取選擇

介面實現展示

#import "nduncaughtexceptionhandler.h"

return [nssearchpathfordirectoriesindomains(nsdocumentdirectory, nsuserdomainmask, yes) lastobject];

void uncaughtexceptionhandler(n***ception *exception) {

nsarray *arr = [exception callstacksymbols];

nsstring *reason = [exception reason];

nsstring *name = [exception name];

nsstring *url = [nsstring stringwithformat:@"**********===異常崩潰報告**********===\nname:\n%@\nreason:\n%@\ncallstacksymbols:\n%@",

name,reason,[arr componentsjoinedbystring:@"\n"]];

[url writetofile:path atomically:yes encoding:nsutf8stringencoding error:nil];

//除了可以選擇寫到應用下的某個檔案,通過後續處理將資訊傳送到伺服器等

//還可以選擇呼叫傳送郵件的的程式,傳送資訊到指定的郵件位址

//或者呼叫某個處理程式來處理這個資訊

@implementation nduncaughtexceptionhandler

return [nssearchpathfordirectoriesindomains(nsdocumentdirectory, nsuserdomainmask, yes) lastobject];

+ (void)setdefaulthandler

nssetuncaughtexceptionhandler (&uncaughtexceptionhandler);

+ (nsuncaughtexceptionhandler*)gethandler

return nsgetuncaughtexceptionhandler();

@end

異常崩潰報告:

**********===異常崩潰報告**********===

name:

nsrangeexception

reason:

*** -[nsarray objectatindex:]: index 1 beyond bounds [0 .. 0]

callstacksymbols:

0   corefoundation                      0x02393919 __exceptionpreprocess + 185

1   libobjc.a.dylib                     0x024e15de objc_exception_throw + 47

2   corefoundation                      0x0238958c -[__nsarrayi objectatindex:] + 236

9   graphicsservices                    0x02bf9afa purpleeventcallback + 1578

10  corefoundation                      0x02374dc4 __cfrunloop_is_calling_out_to_a_source1_perform_function__ + 52

11  corefoundation                      0x022d5737 __cfrunloopdosource1 + 215

12  corefoundation                      0x022d29c3 __cfrunlooprun + 979

13  corefoundation                      0x022d2280 cfrunlooprunspecific + 208

14  corefoundation                      0x022d21a1 cfrunloopruninmode + 97

17  uncaughte                           0x00002228 main + 102

18  uncaughte                           0x000021b9 start + 53

iOS已發布應用中對異常資訊捕獲和處理

ios開發中我們會遇到程式丟擲異常退出的情況,如果是在除錯的過程中,異常的資訊是一目了然,但是如果是在已經發布的程式中,獲取異常的資訊有時候是比較困難的。ios提供了異常發生的處理api,我們在程式啟動的時候可以新增這樣的handler,這樣的程式發生異常的時候就可以對這一部分的資訊進行必要的處理,...

iOS已發布應用中對異常資訊捕獲和處理

ios已發布應用中對異常資訊捕獲和處理 ios開發中我們會遇到程式丟擲異常退出的情況,如果是在除錯的過程中,異常的資訊是一目了然,但是如果是在已經發布的程式中,獲取異常的資訊有時候是比較困難的。ios提供了異常發生的處理api,我們在程式啟動的時候可以新增這樣的handler,這樣的程式發生異常的時...

iOS已發布應用中對異常資訊捕獲和處理

m ios已發布應用中對異常資訊捕獲和處理 ios開發中我們會遇到程式丟擲異常退出的情況,如果是在除錯的過程中,異常的資訊是一目了然,但是如果是在已經發布的程式中,獲取異常的資訊有時候是比較困難的。ios提供了異常發生的處理api,我們在程式啟動的時候可以新增這樣的handler,這樣的程式發生異常...