考虑这样的代码:
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
被“{1}}”召唤?
我希望看到类似的内容:
bar
...
foo
...
main
答案 0 :(得分:6)
查看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
。