无法捕获依赖库中的错误

时间:2018-04-13 00:07:48

标签: java android react-native error-handling sentry

我正在构建一个React Native Application,我正在尝试构建一个完全本机的错误处理程序,作为本机级崩溃的最终回退,它完全绕过javascript。

我通过调整此博客帖子创建了一个全局错误记录器:

http://sterl.org/2016/02/android-global-exception-handler/

package com.myPackage;

import io.sentry.Sentry;
import android.content.Context;
import android.util.Log;

public class MyExceptionHandler implements Thread.UncaughtExceptionHandler {

    private Context context;
    private Thread.UncaughtExceptionHandler rootHandler;

    public MyExceptionHandler(Context context) {
        this.context = context;
        this.rootHandler = Thread.getDefaultUncaughtExceptionHandler();
        Thread.setDefaultUncaughtExceptionHandler(this);
    }

    @Override
    public void uncaughtException(final Thread thread, final Throwable ex) {
        Log.e("Alert","in handler");
        Sentry.capture(ex);
        if (this.rootHandler != null) {
            this.rootHandler.uncaughtException(thread, ex);
        } else {
            android.os.Process.killProcess(android.os.Process.myPid());
            System.exit(0);
        }
    }
}

MainActivity.java中消耗了哪些内容:

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.e("Alert","onCreateActivity");
Log.e("Alert", String.valueOf(BuildConfig.PRODUCTION_RELEASE));
if (BuildConfig.PRODUCTION_RELEASE) {
  Context ctx = this.getApplicationContext();

  String sentryDsn = BuildConfig.SENTRY_DSN;
  Sentry.init(sentryDsn, new AndroidSentryClientFactory(ctx));

  Log.e("Alert","instantiation happens next");
  new MyExceptionHandler(MainActivity.this);

  }
  }

还有MainApplication:

@Override
  public void onCreate() {
    super.onCreate();
    new FlockExceptionHandler(this);
    AppEventsLogger.activateApp(this);
  };

如果我添加

,这是有效的
int x = 2/0;

MainApplication中,如果我在依赖库(在node_modules下)的(java代码)中添加相同的行,则在加载库时应用程序会进行红屏,并且永远不会触发我的自定义错误处理程序

为什么在这种情况下我的自定义处理程序没有被触发?我怎样才能实现这种行为?

此外,即使在自定义错误处理程序触发的情况下(例如,日志运行,我可以注销SENTRY_DSN,它是正确的),Sentry仍然没有得到通知。那是为什么?

0 个答案:

没有答案