在我們實際開發中,我們會碰到很多的問題。但是閃退是我們和使用者是最不能接受的,可我們打包之後沒有辦法獲取到錯誤日誌,所以在這裡,我們將學習怎麼在程式裡獲取錯誤日誌,並且上傳至我們規定的郵箱裡面。
首先,我們先建立乙個可以獲取錯誤日誌的類繼承nsobject
catchcrash
在這個類的.h裡面定義乙個可以獲取錯誤日誌的
void uncaughtexceptionhandler(n***ception *exception);
在.m裡面寫具體的實現方法
// 異常的堆疊資訊
nsarray *stackarray = [exception callstacksymbols];
// 出現異常的原因
nsstring *reason = [exception reason];
// 異常名稱
nsstring *name = [exception name];
nsstring
*exceptioninfo = [
nsstring
stringwithformat
:@"exception reason:%@\nexception name:%@\nexception stack:%@",name, reason, stackarray];
nslog(@"%@", exceptioninfo);
nsmutablearray *tmparr = [nsmutablearray
arraywitharray:stackarray];
[tmparr insertobject:reason atindex:0];
//儲存到本地-- 當然你可以在下次啟動的時候,上傳這個log
[exceptioninfo writetofile:[
nsstring
stringwithformat:
@"%@/documents/error.log"
,nshomedirectory()] atomically:
yesencoding:nsutf8stringencodingerror:
nil];
//在出現錯誤的地方截圖
uigraphicsbeginimagecontextwithoptions(cgsizemake(cgrectgetwidth([
uiscreen
mainscreen].
bounds
),cgrectgetheight([
uiscreen
mainscreen].
bounds
)),no,1
); [[keywindow
drawviewhierarchyinrect:cgrectmake(0,
0,cgrectgetwidth([
uiscreen
mainscreen].
bounds
),cgrectgetheight([
uiscreen
mainscreen].
bounds
))afterscreenupdates:
no];
uiimage
*snapshot =uigraphicsgetimagefromcurrentimagecontext();
//把出現錯誤的截屏保存在本地
具體的檔案
#import
#import
@inte***ce catchcrash : nsobject
void uncaughtexceptionhandler(n***ception *exception);
@end
#import "catchcrash.h"
@implementationcatchcrash
void uncaughtexceptionhandler(n***ception *exception)
@end
然後在下一次程式啟動的時候,我們從儲存的路徑裡拿出資料,如果有資料那麼我們就去上傳到我們的郵箱裡面
nssetuncaughtexceptionhandler(&
uncaughtexceptionhandler);
nsstring
*str = [[
nsstring
alloc]initwithcontentsoffile:[[
nsstring
alloc]initwithformat:
@"%@/documents/error.log"
,nshomedirectory()]encoding:nsutf8stringencodingerror:
nil];
if (str)
else
之後就是我們怎麼上傳到郵箱裡
nsstring
*str = [[
nsstring
alloc]initwithcontentsoffile:[[
nsstring
alloc]initwithformat:
@"%@/documents/error.log"
,nshomedirectory()]encoding:nsutf8stringencodingerror:
nil];
mfmailcomposeviewcontroller*mc = [[mfmailcomposeviewcontroller
alloc
]init];
mc.mailcomposedelegate=
self;
if (!mc)
[mc setsubject:@"
錯誤日誌
這是系統提供的乙個傳送郵件的乙個類需要匯入messageui.framework
在我們的**方法裡面需要做一些操作
- (void)mailcomposecontroller:(mfmailcomposeviewcontroller *)controller didfinishwithresult:(mfmailcomposeresult)result error:(nullable
nserror *)error
[self
dismissviewcontrolleranimated:
yescompletion:
nil]; }
這裡刪除錯誤檔案看專案需求,在**開啟郵箱並上傳也需要看實際需要。
這裡我們的錯誤日誌獲取,上傳至郵箱完成了
關於上次我寫的做一些補充。
這個方法只能獲取到oc的異常,其他的還需要各位在網上搜其他的方法
在註冊捕獲異常的時候盡量寫到
didfinishlaunchingwithoptions最後,因為第三方的sdk有時候會把你的許可權截獲
Nuxt Vue ElementUI開發錯誤記錄
一 this may cause things to work incorrectly.make sure to use the same version for both.原因 版本不統一 解決辦法 刪除node models資料夾和package lock.json檔案,重新 npm insta...
Android開發錯誤集錦
error 13,13 錯誤 找不到符號 符號 類 imageview 位置 類 mainactivity privateimageviewimageview 這裡提示 imageview cannot resolve symbol 後來發現 import 沒有import android.widg...
VTK開發 錯誤集錦
1 文字未顯示 現象 在vtk中使用vtktextactor或vtkactor2d類顯示文字,結果文字未顯示出來 解決方法 在程式上方加上 vtk module init vtkrenderingfreetype 2 編譯出現錯誤 no override found for 解決方法 在程式上方加上...