Sco*_*ttF 5 stack-trace dart crashlytics flutter
摘要: 我在 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);
}
Run Code Online (Sandbox Code Playgroud)
问题是 crashlytics 根据第一个堆栈帧识别每个错误。因此,我的所有错误都被识别为同一错误,因为我正在从同一方法获取堆栈跟踪。我知道我可以从调用者传递堆栈跟踪,但对我来说更好的解决方案是操作堆栈跟踪,以便调用者做更少的工作。
这在 Dart 中可行吗?
我最终得到了一个可靠的解决方案。
我使用了stack_trace 库及其提供的类 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);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2282 次 |
最近记录: |