我的哨兵设置是这样的:
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,
);
}
我在小部件的构建方法中添加了throw Exception("my-error")
,但我看不到 Sentry Web 控制台上显示的错误。
我创建了一个文件来抛出异常和哨兵捕获,我确实看到哨兵正在报告错误。
runZonedGuarded
一定有问题.
在经历了许多似乎无法正常工作的哨兵设置之后,我得出了这个有效的设置:
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,
);
});
}
如果您使用的是免费版本,并且未超过每月配额,请检查您的哨兵仪表板。如果是这种情况,您将不会收到任何事件。
- 您必须使 func 异步才能将错误发送到哨兵控制台
- 请务必为移动应用导入此文件:
import 'package:sentry/io_client.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.');
},
顺便说一下,在发布版本中,它将发送每个异常,因为在调试中 颤振不会捕获控制台中显示的每个错误,为了简化它,您可以使用以下软件包之一:
- https://pub.dev/packages/catcher
- https://pub.dev/packages/flutter_sentry