Use Chain.capture instead of RunZoned (#6420)

diff --git a/packages/flutter_tools/lib/src/hot.dart b/packages/flutter_tools/lib/src/hot.dart
index 3c0a41e..240dafd 100644
--- a/packages/flutter_tools/lib/src/hot.dart
+++ b/packages/flutter_tools/lib/src/hot.dart
@@ -7,6 +7,7 @@
 import 'dart:io';
 
 import 'package:path/path.dart' as path;
+import 'package:stack_trace/stack_trace.dart';
 
 import 'application_package.dart';
 import 'asset.dart';
@@ -145,7 +146,7 @@
     bool shouldBuild: true
   }) {
     // Don't let uncaught errors kill the process.
-    return runZoned(() {
+    return Chain.capture(() {
       return _run(
         connectionInfoCompleter: connectionInfoCompleter,
         route: route,
diff --git a/packages/flutter_tools/lib/src/run.dart b/packages/flutter_tools/lib/src/run.dart
index 642465135..dbae42e 100644
--- a/packages/flutter_tools/lib/src/run.dart
+++ b/packages/flutter_tools/lib/src/run.dart
@@ -5,6 +5,8 @@
 import 'dart:async';
 import 'dart:io';
 
+import 'package:stack_trace/stack_trace.dart';
+
 import 'application_package.dart';
 import 'base/logger.dart';
 import 'base/utils.dart';
@@ -47,7 +49,7 @@
     bool shouldBuild: true
   }) {
     // Don't let uncaught errors kill the process.
-    return runZoned(() {
+    return Chain.capture(() {
       assert(shouldBuild == !prebuiltMode);
       return _run(
         traceStartup: traceStartup,