哨兵未在Flutter内部报告错误

时间:2020-05-12 02:40:36

标签: flutter sentry

我的哨兵设置如下:

void main() => runZonedGuarded(() {
  runApp(MyApp());
}, (Object error, StackTrace stackTrace) {
  reportError(error, stackTrace);
});

及相关功能

final SentryClient sentry = new SentryClient(dsn: '<my-dsn>');


Future<void> reportError(dynamic error, dynamic stackTrace) async {
  sentry.captureException(
    exception: error,
    stackTrace: stackTrace,
  );
}

我在小部件的build方法中添加了throw Exception("my-error"),但看不到Sentry Web控制台上显示的错误。

我创建了一个文件来引发异常和哨兵捕获,并且确实看到哨兵正在报告错误。

runZonedGuarded一定有问题。

4 个答案:

答案 0 :(得分:0)

  1. 您必须使func异步才能将错误发送到哨兵控制台
  2. 确保为移动应用导入此文件:
    import 'package:sentry/io_client.dart';
    例如:

main.dart

import 'package:sentry/io_client.dart';
final SentryClient sentry = new SentryClient(dsn: YOUR_DSN);

main() async {
  try {
    throw new StateError('This is a Dart exception.');
  } catch(error, stackTrace) {
    await sentry.captureException(
      exception: error,
      stackTrace: stackTrace,
    );
  }
}

主屏幕

floatingActionButton: FloatingActionButton(
          onPressed: () async{

            throw new StateError('This is a Dart exception.');

          },

答案 1 :(得分:0)

通过发行版的方式,它将发送每个异常,因为在调试抖动中不会捕获控制台中显示的每个错误,为简化起见,您可以使用以下软件包之一:

答案 2 :(得分:0)

在哨兵控制面板中检查是否正在使用免费版本,以及是否未超过每月配额。如果是这种情况,您将不会收到任何事件。

答案 3 :(得分:0)

在进行许多似乎无法正常工作的Sentry设置后,我得出了一个可行的方法:

Future<void> main() async {
  final sentry = Sentry.SentryClient(Sentry.SentryOptions(dsn: '[Add dsn URI here]'));

  runZonedGuarded(() {
    WidgetsFlutterBinding.ensureInitialized();

    FlutterError.onError = (FlutterErrorDetails errorDetails) {
      sentry.captureException(
        errorDetails.exception,
        stackTrace: errorDetails.stack,
      );
    };

    runApp(MyApp());
  }, (Object error, StackTrace stackTrace) {
    sentry.captureException(
      error,
      stackTrace: stackTrace,
    );
  });
}