gpt4 book ai didi

flutter - 在 dart 中操作 StackTrace

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

总结:我在 dart 中有一个堆栈跟踪,我想删除第 0 帧,然后调整整个堆栈跟踪(第 1 帧现在是第 0 帧,第 2 帧现在是第 1 帧)。

详细信息:我在 dart 中编写了自己的断言类型函数,如果失败,将获取当前堆栈跟踪并发送到 crashlytics。

static void asrt(bool condition)
{
if (condition)
return;
StackTrace stacktrace = StackTrace.current;
Crashlytics.instance.recordError("assert triggered" , stacktrace);
}

问题在于 crashlytics 会根据第一个堆栈帧来识别每个错误。所以我所有的错误都被识别为同一个错误,因为我正在从同一个方法中获取堆栈跟踪。我知道我可以从调用者传递堆栈跟踪,但对我来说更可取的解决方案是操纵堆栈跟踪,以便调用者做更少的工作。

这在 dart 中可行吗?

最佳答案

我最终得到了一个可靠的解决方案。

我使用了stack_trace library及其提供的类 Trace 和 Frame。

在以下示例中,trace.frames 返回一个不可变列表,因此我执行了深层复制。我对此没意见,因为无论如何它只会在崩溃时运行。

    StackTrace stacktrace = StackTrace.current;
Trace trace = Trace.from(stacktrace);
List<Frame> frames = trace.frames;
List<Frame> newFrames = List<Frame>();

// start at index 1 to omit frame #0
for (int i = 1; i < frames.length; i++) {
Frame f = frames[i];
newFrames.add(Frame(f.uri , f.line , f.column , f.member));
}

Trace newTrace = Trace(newFrames);

关于flutter - 在 dart 中操作 StackTrace,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62597060/

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