此代码:
try {
try {
throw 1;
} catch (e, s) {
print("$e $s");
throw e;
}
} catch (e2, s2) {
print("$e2 $s2");
}
打印:
1 #0 main (file:///.../test.dart:34:7)
1 #0 main (file:///.../test.dart:37:7)
因此原始堆栈跟踪完全丢失。是否有任何方法可以重新保留堆栈跟踪?
答案 0 :(得分:12)
当前版本的Dart VM和dart2js
支持重新抛出,保留堆栈跟踪,rethrow
:
void main() {
try {
try {
throw 1;
} catch (e, s) {
print("$e $s");
rethrow;
}
} catch (e2, s2) {
print("$e2 $s2");
}
}
这会产生:
1 #0 main (file:///home/darshan/so/stacktrace.dart:4:7) 1 #0 main (file:///home/darshan/so/stacktrace.dart:4:7) #1 main (file:///home/darshan/so/stacktrace.dart:7:7)