gpt4 book ai didi

dart - 使用 dart 的 async 和 stack_trace 的 Chain

转载 作者:行者123 更新时间:2023-12-03 03:18:43 25 4
gpt4 key购买 nike

我正在尝试利用 stack_trace 提供的 Chain 对象,如下所示:

import 'dart:async';
import 'package:stack_trace/stack_trace.dart';

main() async {
print('Hello world: ${console_test.calculate()}!');
Chain.capture(() async {
try {
await testFunction();
} catch(e,st) {
print(Trace.format(new Chain.forTrace(st)));
}
});
}


Future testFunction() async {
throw new Exception("TEST");
}

我得到的输出是这样的:

Hello world: 42!
main.dart 4:1 main.<async>.<fn>.<async>

我知道输出的堆栈跟踪应该包括 testFunction,但由于某种原因它不是。如果我用 future 来代替:

import 'dart:async';
import 'package:stack_trace/stack_trace.dart';

main() async {
print('Hello world: ${console_test.calculate()}!');
Chain.capture(() {
return testFunction();
}, onError: (e, stackTrace) => print(Trace.format(new Chain.forTrace(stackTrace))));
}

Future testFunction() async {
throw new Exception("TEST");
}

我得到更多预期的输出:

Hello world: 42!
main.dart 17:3 testFunction.<async>
dart:async _Completer.completeError
main.dart 4:1 testFunction.<async>
dart:async Future.Future
main.dart 4:1 testFunction
main.dart 11:26 main.<async>.<fn>
package:stack_trace Chain.capture
main.dart 10:16 main.<async>

难道我做错了什么? Chain 是否与整个 async/await 不兼容?

最佳答案

什么版本的 Dart 和 stack_trace你正在用吗?在 Dart 1.9.0-edge.44028stack_trace 1.2.3 , 删除 console_test 后行,我得到以下输出:

test.dart 16:3       testFunction.<async>
dart:async _Completer.completeError
test.dart 17:2 testFunction.<async>
dart:async Future.Future.microtask
test.dart 7:25 main.<async>.<fn>.<async>
package:stack_trace Chain.capture
test.dart 5:16 main.<async>

还值得注意的是,您实际上并不需要使用 Trace.formatChain .您可以使用 Chain.terse ,这也将保留异步间隙。

关于dart - 使用 dart 的 async 和 stack_trace 的 Chain,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28843720/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com