dart - 我可以使用 Dart 获取跟踪所有异步调用的 "stack trace"吗?

标签 dart dart-async

考虑这样的代码:

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));
}

我怎么知道 barfoo“调用”了在 stackTrace我打印出来的?

我想看到类似的东西:
bar
...
foo
...
main

最佳答案

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

包的输出示例:

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

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

关于dart - 我可以使用 Dart 获取跟踪所有异步调用的 "stack trace"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22056647/

相关文章:

Flutter CachedNetworkImage 错误 : (CacheManager: Failed to download file) and (SocketException or HttpException)

flutter - 使用 Flutter notification_permissions 包监听设备通知权限

dart - Dart异步/等待封装

dart - Flutter BLoC 模式 - 如何在流事件后导航到另一个屏幕?

multithreading - Dart中的线程:无法导入包

Flutter 构建找不到 'dart:html'

Dart 异步执行

dart - `runZoned` 的函数 'dart:async' 的用途

date - 更改 Dart 上的日期格式

java - Flutter - 无法将 MethodChannel 与 Firebase onBackgroundMessage 一起使用