Flutter:抛出异常时获取完整的堆栈跟踪?

sta*_*234 4 exception dart flutter

我构建了一个应用程序,我有几个 try-catch。问题是,每当我打印出异常时,它只打印出异常的第一行。例如,当我删除所有 try-catch 并引发异常时,它会显示以下内容:

E/flutter (15478): [ERROR:flutter/lib/ui/ui_dart_state.cc(199)] Unhandled Exception: Null check operator used on a null value
E/flutter (15478): #0      MyClass._insertIntoDB (package:test/util/my_class.dart:186:25)
E/flutter (15478): <asynchronous suspension>
E/flutter (15478): #1      MyClass.download(package:test/util/my_class.dart:62:11)
E/flutter (15478): <asynchronous suspension>
E/flutter (15478): #2      blabla.asaa(package:test/sync.dart:94:9)
E/flutter (15478): <asynchronous suspension>
E/flutter (15478): #3      tata.dodo(package:test/my_screen.dart:91:11)
E/flutter (15478): <asynchronous suspension>
E/flutter (15478): 
Run Code Online (Sandbox Code Playgroud)

每当发生这种情况时,我都可以看到问题发生在哪里:MyClass._insertIntoDB (package:test/util/my_class.dart:186:25)<--

但是当我将给定的代码放在 try-catch 之间时,我只返回:

E/flutter (15478): [ERROR:flutter/lib/ui/ui_dart_state.cc(199)] Unhandled Exception: Null check operator used on a null value

消息,说的是问题是什么,但没有说问题出在哪里......

这是首先处理异常的地方:

 try {
      List<MyDto> dtoList = dtoFromJson(body);
      if (dtoList.isNotEmpty) {
        for (var i in dtoList) {
          await _insertIntoDB(i, db);
        }
      }
    } catch (error) {
      throw Exception(
          "Problem while JSON decoding results. [error=${error.toString()}]");
    }
Run Code Online (Sandbox Code Playgroud)

这里的误差等于:[ERROR:flutter/lib/ui/ui_dart_state.cc(199)] Unhandled Exception: Null check operator used on a null value

所以我得到这个错误:"Problem while JSON decoding results. [error=[ERROR:flutter/lib/ui/ui_dart_state.cc(199)] Unhandled Exception: Null check operator used on a null value]"

因此,没有显示抛出异常的位置(文件中的哪一行)的实际有用信息......是否可以包含堆栈跟踪的其余部分?

请注意,看到我没有问为什么抛出异常!(这不是我不包含代码的原因insertIntoDb)。

提前致谢。

DJa*_*ari 10

catch 的第二个参数是stackTrace

try {
  List<MyDto> dtoList = dtoFromJson(body);
  if (dtoList.isNotEmpty) {
    for (var i in dtoList) {
      await _insertIntoDB(i, db);
    }
  }
} catch (error, stack) {
  print(stack);
  throw Exception(
      "Problem while JSON decoding results. [error=${error.toString()}]");
}
Run Code Online (Sandbox Code Playgroud)