繁体   English   中英

我可以通过Dart获得跟踪所有异步调用的“堆栈跟踪”吗?

[英]Can I get a “stack trace” that traces all async calls, with Dart?

考虑这样的代码:

import 'dart:async';

foo() {
  new Timer(onesec, bar);
}

bar() {
  throw "from bar";
}

const onesec = const Duration(seconds:1);

main() {
  runZoned(() {
  new Timer(onesec, foo);
  },
  onError: (e, stackTrace) => print(stackTrace));
}

如何我可以告诉大家, bar被“叫”,由foostackTrace ,我打印出来?

我希望看到类似的东西:

bar
...
foo
...
main

看看stack_trace包 它使用区域来跟踪异步回调。 捕获每个异步回调的堆栈跟踪都很昂贵,但是对于调试来说它绝对值得。

包的示例输出:

http://dartlang.org/foo/bar.dart 10:11  Foo.<fn>.bar
http://dartlang.org/foo/baz.dart        Foo.<fn>.bar
===== asynchronous gap ===========================
http://dartlang.org/foo/bang.dart 10:11  Foo.<fn>.bar
http://dartlang.org/foo/quux.dart        Foo.<fn>.bar

根据文档 ,获取这些痕迹的最简单方法是使用Chain.capture

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM