测试发现bug,复现不出来怎么办

一、 背景

是否有这种情况,测试发现了个crash的bug,找到研发,但是研发复现不出来...

二、解决方案

在App Crash的时候,利用CrashHandler捕获异常,将异常信息输出在屏幕上

public class CrashHandler implements Thread.UncaughtExceptionHandler {
    public static void init(Context context) {
        Thread.UncaughtExceptionHandler exceptionHandler = Thread.getDefaultUncaughtExceptionHandler();
        if (exceptionHandler != null
                && exceptionHandler.getClass().getName().startsWith("当前类的package name")) {
            return;
        }
        Thread.setDefaultUncaughtExceptionHandler(new CrashHandler(context));
    }

    private Context mContext;

    private CrashHandler(Context context) {
        this.mContext = context;
    }

    @Override
    public void uncaughtException(Thread thread, Throwable ex) {
        //128kb-1
        int maxStackTraceSize = 131071;
        StringWriter sw = new StringWriter();
        PrintWriter pw = new PrintWriter(sw);
        ex.printStackTrace(pw);
        String stackTraceString = sw.toString();

        if (stackTraceString.length() > maxStackTraceSize) {
            String disclaimer = " [stack trace too large]";
            stackTraceString = stackTraceString.substring(0, maxStackTraceSize - disclaimer.length()) + disclaimer;
        }

        // 在另外一个进程 打开Activity
        Intent intent = new Intent(mContext.getApplicationContext(), ExceptionActivity.class);
        intent.putExtra(ExtraName.CRASH_MESSEAG, stackTraceString);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        mContext.startActivity(intent);

        android.os.Process.killProcess(android.os.Process.myPid());
        System.exit(10);
    }
}
  1. 注意点:
  • ExceptionActivity 必须在另外一个进程,在manifest里设置即可

三、结语

  1. 赠人玫瑰手留余香
  2. 如果对您有帮助,请点赞支持我~~
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容