| Index: third_party/dart-packages/stack_trace/README.md
|
| diff --git a/third_party/dart-packages/stack_trace/README.md b/third_party/dart-packages/stack_trace/README.md
|
| deleted file mode 100644
|
| index 38b768d68af8326b5ecdd8957683cc6b2c15dda3..0000000000000000000000000000000000000000
|
| --- a/third_party/dart-packages/stack_trace/README.md
|
| +++ /dev/null
|
| @@ -1,208 +0,0 @@
|
| -This library provides the ability to parse, inspect, and manipulate stack traces
|
| -produced by the underlying Dart implementation. It also provides functions to
|
| -produce string representations of stack traces in a more readable format than
|
| -the native [StackTrace] implementation.
|
| -
|
| -`Trace`s can be parsed from native [StackTrace]s using `Trace.from`, or captured
|
| -using `Trace.current`. Native [StackTrace]s can also be directly converted to
|
| -human-readable strings using `Trace.format`.
|
| -
|
| -[StackTrace]: http://api.dartlang.org/docs/releases/latest/dart_core/StackTrace.html
|
| -
|
| -Here's an example native stack trace from debugging this library:
|
| -
|
| - #0 Object.noSuchMethod (dart:core-patch:1884:25)
|
| - #1 Trace.terse.<anonymous closure> (file:///usr/local/google-old/home/goog/dart/dart/pkg/stack_trace/lib/src/trace.dart:47:21)
|
| - #2 IterableMixinWorkaround.reduce (dart:collection:29:29)
|
| - #3 List.reduce (dart:core-patch:1247:42)
|
| - #4 Trace.terse (file:///usr/local/google-old/home/goog/dart/dart/pkg/stack_trace/lib/src/trace.dart:40:35)
|
| - #5 format (file:///usr/local/google-old/home/goog/dart/dart/pkg/stack_trace/lib/stack_trace.dart:24:28)
|
| - #6 main.<anonymous closure> (file:///usr/local/google-old/home/goog/dart/dart/test.dart:21:29)
|
| - #7 _CatchErrorFuture._sendError (dart:async:525:24)
|
| - #8 _FutureImpl._setErrorWithoutAsyncTrace (dart:async:393:26)
|
| - #9 _FutureImpl._setError (dart:async:378:31)
|
| - #10 _ThenFuture._sendValue (dart:async:490:16)
|
| - #11 _FutureImpl._handleValue.<anonymous closure> (dart:async:349:28)
|
| - #12 Timer.run.<anonymous closure> (dart:async:2402:21)
|
| - #13 Timer.Timer.<anonymous closure> (dart:async-patch:15:15)
|
| -
|
| -and its human-readable representation:
|
| -
|
| - dart:core-patch Object.noSuchMethod
|
| - pkg/stack_trace/lib/src/trace.dart 47:21 Trace.terse.<fn>
|
| - dart:collection IterableMixinWorkaround.reduce
|
| - dart:core-patch List.reduce
|
| - pkg/stack_trace/lib/src/trace.dart 40:35 Trace.terse
|
| - pkg/stack_trace/lib/stack_trace.dart 24:28 format
|
| - test.dart 21:29 main.<fn>
|
| - dart:async _CatchErrorFuture._sendError
|
| - dart:async _FutureImpl._setErrorWithoutAsyncTrace
|
| - dart:async _FutureImpl._setError
|
| - dart:async _ThenFuture._sendValue
|
| - dart:async _FutureImpl._handleValue.<fn>
|
| - dart:async Timer.run.<fn>
|
| - dart:async-patch Timer.Timer.<fn>
|
| -
|
| -You can further clean up the stack trace using `Trace.terse`. This folds
|
| -together multiple stack frames from the Dart core libraries, so that only the
|
| -core library method that was directly called from user code is visible. For
|
| -example:
|
| -
|
| - dart:core Object.noSuchMethod
|
| - pkg/stack_trace/lib/src/trace.dart 47:21 Trace.terse.<fn>
|
| - dart:core List.reduce
|
| - pkg/stack_trace/lib/src/trace.dart 40:35 Trace.terse
|
| - pkg/stack_trace/lib/stack_trace.dart 24:28 format
|
| - test.dart 21:29 main.<fn>
|
| - dart:async Timer.Timer.<fn>
|
| -
|
| -## Stack Chains
|
| -
|
| -This library also provides the ability to capture "stack chains" with the
|
| -`Chain` class. When writing asynchronous code, a single stack trace isn't very
|
| -useful, since the call stack is unwound every time something async happens. A
|
| -stack chain tracks stack traces through asynchronous calls, so that you can see
|
| -the full path from `main` down to the error.
|
| -
|
| -To use stack chains, just wrap the code that you want to track in
|
| -`Chain.capture`. This will create a new [Zone][] in which stack traces are
|
| -recorded and woven into chains every time an asynchronous call occurs. Zones are
|
| -sticky, too, so any asynchronous operations started in the `Chain.capture`
|
| -callback will have their chains tracked, as will asynchronous operations they
|
| -start and so on.
|
| -
|
| -Here's an example of some code that doesn't capture its stack chains:
|
| -
|
| -```dart
|
| -import 'dart:async';
|
| -
|
| -void main() {
|
| - scheduleAsync();
|
| -}
|
| -
|
| -void scheduleAsync() {
|
| - return new Future.delayed(new Duration(seconds: 1))
|
| - .then((_) => runAsync());
|
| -}
|
| -
|
| -void runAsync() {
|
| - throw 'oh no!';
|
| -}
|
| -```
|
| -
|
| -If we run this, it prints the following:
|
| -
|
| - Uncaught Error: oh no!
|
| - Stack Trace:
|
| - #0 runAsync (file:///usr/local/google-old/home/goog/dart/dart/test.dart:13:3)
|
| - #1 scheduleAsync.<anonymous closure> (file:///usr/local/google-old/home/goog/dart/dart/test.dart:9:28)
|
| - #2 _rootRunUnary (dart:async/zone.dart:717)
|
| - #3 _RootZone.runUnary (dart:async/zone.dart:854)
|
| - #4 _Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:488)
|
| - #5 _Future._propagateToListeners (dart:async/future_impl.dart:571)
|
| - #6 _Future._complete (dart:async/future_impl.dart:317)
|
| - #7 _SyncCompleter.complete (dart:async/future_impl.dart:44)
|
| - #8 Future.Future.delayed.<anonymous closure> (dart:async/future.dart:219)
|
| - #9 _createTimer.<anonymous closure> (dart:async-patch/timer_patch.dart:11)
|
| - #10 _handleTimeout (dart:io/timer_impl.dart:292)
|
| - #11 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:115)
|
| -
|
| -Notice how there's no mention of `main` in that stack trace. All we know is that
|
| -the error was in `runAsync`; we don't know why `runAsync` was called.
|
| -
|
| -Now let's look at the same code with stack chains captured:
|
| -
|
| -```dart
|
| -import 'dart:async';
|
| -
|
| -import 'package:stack_trace/stack_trace.dart';
|
| -
|
| -void main() {
|
| - Chain.capture(() {
|
| - scheduleAsync();
|
| - });
|
| -}
|
| -
|
| -void scheduleAsync() {
|
| - new Future.delayed(new Duration(seconds: 1))
|
| - .then((_) => runAsync());
|
| -}
|
| -
|
| -void runAsync() {
|
| - throw 'oh no!';
|
| -}
|
| -```
|
| -
|
| -Now if we run it, it prints this:
|
| -
|
| - Uncaught Error: oh no!
|
| - Stack Trace:
|
| - test.dart 17:3 runAsync
|
| - test.dart 13:28 scheduleAsync.<fn>
|
| - package:stack_trace/src/stack_zone_specification.dart 129:26 registerUnaryCallback.<fn>.<fn>
|
| - package:stack_trace/src/stack_zone_specification.dart 174:15 StackZoneSpecification._run
|
| - package:stack_trace/src/stack_zone_specification.dart 177:7 StackZoneSpecification._run
|
| - package:stack_trace/src/stack_zone_specification.dart 175:7 StackZoneSpecification._run
|
| - package:stack_trace/src/stack_zone_specification.dart 129:18 registerUnaryCallback.<fn>
|
| - dart:async/zone.dart 717 _rootRunUnary
|
| - dart:async/zone.dart 449 _ZoneDelegate.runUnary
|
| - dart:async/zone.dart 654 _CustomizedZone.runUnary
|
| - dart:async/future_impl.dart 488 _Future._propagateToListeners.handleValueCallback
|
| - dart:async/future_impl.dart 571 _Future._propagateToListeners
|
| - dart:async/future_impl.dart 317 _Future._complete
|
| - dart:async/future_impl.dart 44 _SyncCompleter.complete
|
| - dart:async/future.dart 219 Future.Future.delayed.<fn>
|
| - package:stack_trace/src/stack_zone_specification.dart 174:15 StackZoneSpecification._run
|
| - package:stack_trace/src/stack_zone_specification.dart 119:52 registerCallback.<fn>
|
| - dart:async/zone.dart 706 _rootRun
|
| - dart:async/zone.dart 440 _ZoneDelegate.run
|
| - dart:async/zone.dart 650 _CustomizedZone.run
|
| - dart:async/zone.dart 561 _BaseZone.runGuarded
|
| - dart:async/zone.dart 586 _BaseZone.bindCallback.<fn>
|
| - package:stack_trace/src/stack_zone_specification.dart 174:15 StackZoneSpecification._run
|
| - package:stack_trace/src/stack_zone_specification.dart 119:52 registerCallback.<fn>
|
| - dart:async/zone.dart 710 _rootRun
|
| - dart:async/zone.dart 440 _ZoneDelegate.run
|
| - dart:async/zone.dart 650 _CustomizedZone.run
|
| - dart:async/zone.dart 561 _BaseZone.runGuarded
|
| - dart:async/zone.dart 586 _BaseZone.bindCallback.<fn>
|
| - dart:async-patch/timer_patch.dart 11 _createTimer.<fn>
|
| - dart:io/timer_impl.dart 292 _handleTimeout
|
| - dart:isolate-patch/isolate_patch.dart 115 _RawReceivePortImpl._handleMessage
|
| - ===== asynchronous gap ===========================
|
| - dart:async/zone.dart 476 _ZoneDelegate.registerUnaryCallback
|
| - dart:async/zone.dart 666 _CustomizedZone.registerUnaryCallback
|
| - dart:async/future_impl.dart 164 _Future._Future._then
|
| - dart:async/future_impl.dart 187 _Future.then
|
| - test.dart 13:12 scheduleAsync
|
| - test.dart 7:18 main.<fn>
|
| - dart:async/zone.dart 710 _rootRun
|
| - dart:async/zone.dart 440 _ZoneDelegate.run
|
| - dart:async/zone.dart 650 _CustomizedZone.run
|
| - dart:async/zone.dart 944 runZoned
|
| - package:stack_trace/src/chain.dart 93:20 Chain.capture
|
| - test.dart 6:16 main
|
| - dart:isolate-patch/isolate_patch.dart 216 _startIsolate.isolateStartHandler
|
| - dart:isolate-patch/isolate_patch.dart 115 _RawReceivePortImpl._handleMessage
|
| -
|
| -That's a lot of text! If you look closely, though, you can see that `main` is
|
| -listed in the first trace in the chain.
|
| -
|
| -Thankfully, you can call `Chain.terse` just like `Trace.terse` to get rid of all
|
| -the frames you don't care about. The terse version of the stack chain above is
|
| -this:
|
| -
|
| - test.dart 17:3 runAsync
|
| - test.dart 13:28 scheduleAsync.<fn>
|
| - dart:isolate _RawReceivePortImpl._handleMessage
|
| - ===== asynchronous gap ===========================
|
| - dart:async _Future.then
|
| - test.dart 13:12 scheduleAsync
|
| - test.dart 7:18 main.<fn>
|
| - package:stack_trace/src/chain.dart 93:20 Chain.capture
|
| - test.dart 6:16 main
|
| - dart:isolate _RawReceivePortImpl._handleMessage
|
| -
|
| -That's a lot easier to understand!
|
| -
|
| -[Zone]: https://api.dartlang.org/apidocs/channels/stable/#dart-async.Zone
|
|
|