2014-03-26 220 views
1

基礎:使用了XCode(最新版本)的iOS應用開發的Objective-C/C++模塊的iOS應用程序異常處理

我有可能需要一些專家的幫助一個問題....我的應用程序的設計上運行所有硬件上的iOS平臺,但我正在打牆。該應用程序在我的iPod和iPad上的所有模擬器上運行良好,但我的一些測試人員使用的是iPhone,並且問題僅出現在該硬件平臺上。

最基本的問題是,應用程序似乎在各個時間點都會發生異常,有時甚至會在早期使用,有時會超過一個小時。我懷疑它可能是一個內存泄漏或一個無效的調用,只偶爾會增加其醜陋的頭,但我需要找出答案。我已經編寫了應用程序來創建一個日誌文件,當它運行在「調試」版本中時,我可以將這些文件部署到擁有iPhone的測試人員,但我不能總是訪問他們的手機來檢索日誌文件。

我有一個內置於應用程序中的機制來發送屏幕截圖的電子郵件,我可以很容易地修改它來發送日誌文件給我,但我需要一種方法來觸發它。我知道如何從我的應用程序中捕獲異常,包括添加內存探測器,這些內存探測器會自動報告問題並在應用程序實際退出之前調用適當的方法。在應用程序本身內部有沒有辦法在應用程序結束之前自動捕獲這些問題並進行報告,並且所有可用的信息都會丟失?另外,如果以某種方式通過編程方式來執行/轉儲調用堆棧,將其寫入我的日誌文件,與在XCode中使用模擬器時提供的模擬器相同,並保存該信息,會有很大的幫助。

謝謝。

p.s .:我知道這不是一個簡單的請求,而且這個迴應也可能不是很簡單,所以在此先感謝您的幫助。

+0

'applicationDidReceiveMemoryWarning'的applicationDidFixnishLaunchin方法線? – esh

回答

2

我已經使用此代碼進行全局級異常處理。我遇到了一個問題,即運行應用程序的任何一點產生異常和應用程序崩潰,所以我實現了應用程序級異常處理。

請參考此鏈接堆棧溢出可能是這對你有用。

How do you implement global iPhone Exception Handling?

寫入此NSSetUncaughtExceptionHandler(&的UncaughtExceptionHandler)的代碼在AppDelegate類

-(BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions: 
     (NSDictionary*)launchOptions 
    { 
     NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler); 

     EDIT: 
     if([[NSUserDefaults standardUserDefaults] boolForKey:@"isExceptionOccured"]) 
     { 
     //call sever code here 
     [[NSUserDefaults standardUserDefaults] setBool:FALSE forKey:@"isExceptionOccured"]; 
     } 
     //rest of your code 
     } 


     void uncaughtExceptionHandler(NSException *exception) 
     { 


     NSLog(@"Exception Got %@",[exception description]); 
     //do what ever you what here 
    //can save any `bool` so that as aaplication run on immediate next launching of crash 
    //could intimate any thing 

    EDIT: 

    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"isExceptionOccured"]; 

     } 
+0

謝謝!那很棒!你有什麼方法可以將堆棧跟蹤擴展爲更易讀的東西,特別是獲取堆棧中模塊的相關行號?我不介意寫代碼,我只需要一些方向...... – miwalsh

+0

@ user2893015再次看到此代碼...可能這會幫助你。 –

相關問題