考虑这样的代码:
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
被foo
“调用”了在 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/