<strike id="cakm0"></strike>
  • <button id="cakm0"><dl id="cakm0"></dl></button>
  • <samp id="cakm0"><tbody id="cakm0"></tbody></samp>
    <samp id="cakm0"><pre id="cakm0"></pre></samp><ul id="cakm0"></ul>
    <strike id="cakm0"></strike>
    <li id="cakm0"></li>
  • <ul id="cakm0"></ul>
  • 更多精彩內容,歡迎關注:

    視頻號
    視頻號

    抖音
    抖音

    快手
    快手

    微博
    微博

    java crash

    文檔

    java crash

    Crash就是由于代碼異常而導致App非正常退出現象,也就是常說的崩潰。在工作目錄下會產生一個日志文件,而java crash通過簡單的方式就能夠捕獲到異常。
    推薦度:
    導讀Crash就是由于代碼異常而導致App非正常退出現象,也就是常說的崩潰。在工作目錄下會產生一個日志文件,而java crash通過簡單的方式就能夠捕獲到異常。

    java crash是什么,讓我們一起了解一下:

    Crash就是由于代碼異常而導致App非正常退出現象,也就是常說的崩潰。在工作目錄下會產生一個日志文件,而java crash通過簡單的方式就能夠捕獲到異常。

    那么在java進程中crash產生錯誤了怎么辦?

    如果有一個嚴重的錯誤引起Java進程非正常退出,我們叫Crash,這時候會產生一個日志文件,缺省情況下,這個文件會產生在工作目錄下,但是,可以在Java啟動參數通過下面的設置,來改變這個文件的位置和命名規則。例如:java -XX:ErrorFile=/var/log/java/java_error_%p.log。就將這個錯誤文件放在/var/log/java下,并且以java_error_pid.log的形式出現。

    #!/usr/sbin/dtrace?-qs
    proc:::signal-send
    /args[1]->pr_pid?==?$1/
    {
    printf("%s(pid:%d)?is?sending?signal?%d?to?%s"n",?execname,?pid,?args[2],args[1]->pr_fname);
    }

    案例分析java crash的具體使用:以Android Crash之Java Crash為例。

    首先我們要了解Android的Crash類型,那在Android中通常有兩種Crash類型,分別是Java Crash和Native Crash。

    Java Crash在Android上的特點是什么?1、這類錯誤一般是由Java層代碼觸發的。2、一般情況下程序出錯時會彈出提示框,JVM虛擬機退出。3、一般的Crash工具都能夠捕獲,系統也提供了API。

    我們通過UncaughtExceptionHandler來記錄dump異常日志代碼如下:

    package?com.devilwwj.androidcrashdemo;
    /**
    ?*?com.devilwwj.androidcrashdemo
    ?*?Created?by?devilwwj?on?16/5/27.
    ?*/
    import?android.content.Context;
    import?android.content.pm.PackageInfo;
    import?android.content.pm.PackageManager;
    import?android.content.pm.PackageManager.NameNotFoundException;
    import?android.os.Build;
    import?android.os.Environment;
    import?android.os.Process;
    import?android.util.Log;
    import?java.io.BufferedWriter;
    import?java.io.File;
    import?java.io.FileWriter;
    import?java.io.IOException;
    import?java.io.PrintWriter;
    import?java.lang.Thread.UncaughtExceptionHandler;
    import?java.text.SimpleDateFormat;
    import?java.util.Date;
    public?class?CrashHandler?implements?UncaughtExceptionHandler?{
    ????private?static?final?String?TAG?=?"CrashHandler";
    ????private?static?final?boolean?DEBUG?=?true;
    ????private?static?final?String?PATH?=?Environment
    ????????????.getExternalStorageDirectory()?+?"/CrashDemo/log/";
    ????private?static?final?String?FILE_NAME?=?"crash";
    ????private?static?final?String?FILE_NAME_SUFFIX?=?".trace";
    ????private?static?final?String?ABOLUTE_PATH?=?PATH?+?FILE_NAME?+?FILE_NAME_SUFFIX;
    ????private?String?deviceToken;
    ????private?static?CrashHandler?sInstance?=?new?CrashHandler();
    ????private?UncaughtExceptionHandler?mDefaultCrashHandler;
    ????private?Context?mContext;
    ????private?CrashHandler()?{
    ????}
    ????public?static?CrashHandler?getInstance()?{
    ????????return?sInstance;
    ????}
    ????public?void?init(Context?context)?{
    ????????mDefaultCrashHandler?=?Thread.getDefaultUncaughtExceptionHandler();
    ????????Thread.setDefaultUncaughtExceptionHandler(this);
    ????????mContext?=?context.getApplicationContext();
    ????}
    ????/**
    ?????*?這個是最關鍵的函數,當程序中有未被捕獲的異常,系統將會自動調用#uncaughtException方法
    ?????*?thread為出現未捕獲異常的線程,ex為未捕獲的異常,有了這個ex,我們就可以得到異常信息。
    ?????*/
    ????@Override
    ????public?void?uncaughtException(Thread?thread,?Throwable?ex)?{
    ????????try?{
    ????????????//?導出異常信息到SD卡中
    ????????????dumpExceptionToSDCard(ex);
    ????????}?catch?(IOException?e)?{
    ????????????e.printStackTrace();
    ????????}
    ????????ex.printStackTrace();
    ????????//?如果系統提供了默認的異常處理器,則交給系統去結束我們的程序,否則就由我們自己結束自己
    ????????if?(mDefaultCrashHandler?!=?null)?{
    ????????????mDefaultCrashHandler.uncaughtException(thread,?ex);
    ????????}?else?{
    ????????????Process.killProcess(Process.myPid());
    ????????}
    ????}
    ????private?File?dumpExceptionToSDCard(Throwable?ex)?throws?IOException?{
    ????????//?如果SD卡不存在或無法使用,則無法把異常信息寫入SD卡
    ????????if?(!Environment.getExternalStorageState().equals(
    ????????????????Environment.MEDIA_MOUNTED))?{
    ????????????if?(DEBUG)?{
    ????????????????Log.w(TAG,?"sdcard?unmounted,skip?dump?exception");
    ????????????????return?null;
    ????????????}
    ????????}
    ????????File?dir?=?new?File(PATH);
    ????????if?(!dir.exists())?{
    ????????????dir.mkdirs();
    ????????}
    ????????long?current?=?System.currentTimeMillis();
    ????????String?time?=?new?SimpleDateFormat("yyyy-MM-dd?HH:mm:ss")
    ????????????????.format(new?Date(current));
    ????????//?File?file?=?new?File(PATH?+?FILE_NAME?+?time?+?"_"+?deviceToken?+
    ????????//?FILE_NAME_SUFFIX);
    ????????File?file?=?new?File(PATH?+?FILE_NAME?+?FILE_NAME_SUFFIX);
    ????????if?(!file.exists())?{
    ????????????file.createNewFile();
    ????????}?else?{
    ????????????try?{
    ????????????????//?追加內容
    ????????????????PrintWriter?pw?=?new?PrintWriter(new?BufferedWriter(
    ????????????????????????new?FileWriter(file,?true)));
    ????????????????pw.println(time);
    ????????????????dumpPhoneInfo(pw);
    ????????????????pw.println();
    ????????????????ex.printStackTrace(pw);
    ????????????????pw.println("---------------------------------分割線----------------------------------");
    ????????????????pw.println();
    ????????????????pw.close();
    ????????????}?catch?(Exception?e)?{
    ????????????????Log.e(TAG,?"dump?crash?info?failed");
    ????????????}
    ????????}
    ????????return?file;
    ????}
    ????private?void?dumpPhoneInfo(PrintWriter?pw)?throws?NameNotFoundException?{
    ????????PackageManager?pm?=?mContext.getPackageManager();
    ????????PackageInfo?pi?=?pm.getPackageInfo(mContext.getPackageName(),
    ????????????????PackageManager.GET_ACTIVITIES);
    ????????pw.print("App?Version:?");
    ????????pw.print(pi.versionName);
    ????????pw.print('_');
    ????????pw.println(pi.versionCode);
    ????????//?android版本號
    ????????pw.print("OS?Version:?");
    ????????pw.print(Build.VERSION.RELEASE);
    ????????pw.print("_");
    ????????pw.println(Build.VERSION.SDK_INT);
    ????????//?手機制造商
    ????????pw.print("Vendor:?");
    ????????pw.println(Build.MANUFACTURER);
    ????????//?手機型號
    ????????pw.print("Model:?");
    ????????pw.println(Build.MODEL);
    ????????//?cpu架構
    ????????pw.print("CPU?ABI:?");
    ????????pw.println(Build.CPU_ABI);
    ????}
    ????/**
    ?????*?提供方法上傳異常信息到服務器
    ?????*?@param?log
    ?????*/
    ????private?void?uploadExceptionToServer(File?log)?{
    ????????//?TODO?Upload?Exception?Message?To?Your?Web?Server
    ????}
    }

    上面是核心代碼,可以直接拿去用,可以在Application類中進行初始化。

    以上就是小編今天的分享了,希望可以幫助到大家。

    文檔

    java crash

    Crash就是由于代碼異常而導致App非正常退出現象,也就是常說的崩潰。在工作目錄下會產生一個日志文件,而java crash通過簡單的方式就能夠捕獲到異常。
    推薦度:
    為你推薦
    資訊專欄
    熱門視頻
    相關推薦
    java獲取網絡時間 java crontab java獲取視頻時長 java csrf java獲取請求域名 java獲取路徑 java cssbox java獲取運行時間 java ctp java獲取隨機字符串 java daemon java獲取隨機數 java dashboard java獲得當前路徑 java表單校驗 java dataframe java規則引擎 java dataset java讀取json java讀取本地excel java獲取秒級時間戳 java core java獲取泛型class java corba java cookie java獲取本地ip java controller java獲取本周日期 java context japanese java 微信怎么群發消息 java獲取時間差 java獲取文件名后綴 微博賬號怎么注銷 excel如何換行 java獲取當月最后一天日期 excel去重 java獲取當前項目的路徑 QQ怎么強制解綁手機號 java獲取當前路徑的幾種方法
    Top 动漫精品一区二区三区3d| 久久96国产精品| 妇女自拍偷自拍亚洲精品| 日韩精品久久久久久久电影蜜臀| 国产精品二区观看| 日韩精品中文乱码在线观看| 91精品久久久久| 国产成人精品日本亚洲| 国产伦精品一区二区三区视频金莲| 夜夜精品视频一区二区| 亚洲精品资源在线| 久久99九九99九九精品| 久久精品国产黑森林| 国产精品夜夜爽范冰冰| 亚洲欧美精品午睡沙发| 精品国产三级a在线观看| 久久精品94精品久久精品| 亚洲精品蜜桃久久久久久| 国产观看精品一区二区三区| 国产区香蕉精品系列在线观看不卡| 亚洲AV永久无码精品放毛片| 亚洲国产精品无码久久久| 精品一区二区三区在线成人| 久久综合久久精品| 国产小视频国产精品| 91精品国产色综合久久| 国产精品videossex白浆| 日韩经典精品无码一区| 国产精品100页| 国产精品一区二区三区高清在线| 欧美日韩精品乱国产| 亚洲色无码国产精品网站可下载 | 97久久超碰成人精品网站| 3d动漫精品一区视频在线观看| 亚洲av成人无码久久精品| 秋霞久久国产精品电影院| 久久精品国产福利国产秒| 国内精品久久久久久野外| 久久精品嫩草影院| 久久国产精品61947| 98久久人妻无码精品系列蜜桃|