exception - Dart/Flutter - 调试器在捕获到异常时停止

标签 exception flutter dart visual-studio-code vscode-debugger

在检查 API 端点(确定连接状态)的相对简单的代码块中,我依靠 try..catch 作为验证应用程序是否可以与服务器通信的机制。

我遇到的问题是,在调试时,调试器总是在连接线上停止(当应用程序离线时),即使我在内部处理错误也是如此。

  Future<bool> isOnline() async {
    try {
      // VSCode debugger always stops on this line when no connection
      await http
          .get('${consts.apiBaseUrl}/api/ping')
          .timeout(Duration(seconds: normalTimeoutLength))
          .catchError(
        (_) {
          // Trying catchError on the Future
          _isOnline = false;
          return false;
        },
      );
      _isOnline = true;
      return true;
    } on HttpException catch (_) {
      // Trying to catch HTTP Exceptions
      _isOnline = false;
      return false;
    } on SocketException catch (_) {
      // Trying to catch Socket Exceptions
      _isOnline = false;
      return false;
    }
  }

最佳答案

这是 Dart VM 的限制。它无法正确检测到用 catchError() 捕获的异常,因此它会导致调试器在这些异常上暂停。这里有一些关于这个的讨论:

https://github.com/flutter/flutter/issues/33427#issuecomment-504529413

如果您单击“继续/恢复”,行为应该没有差异,但作为解决方法,您可以将代码转换为使用真正的 try/catch 而不是 catchError() 或取消选中 Debug 侧边栏中的选项以中断未捕获的异常(尽管显然这也会影响真正的未捕获异常——尽管在 Flutter 中它们不太常见,因为框架捕获了大多数异常)。

关于exception - Dart/Flutter - 调试器在捕获到异常时停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56802675/

相关文章:

Flutter:获取 print() 语句的行号,Android Studio

flutter - IndexedStack小部件未更新

dart - 如何从 Dart 中的另一个类访问一个类方法?

firebase - 如何更新 firebase 数组中的 map 数据? ( flutter )

java - 如何在通过 DocumentBuidlerFactory 创建新的 xml 文件时生成 ParserConfigurationException

python - Python 中的回溯对象类型是什么?

c# - 比较where子句中的日期部分

c# - 在 WinForms 应用程序中将按钮样式设置为 FlatStyle.System 时出现 System.ObjectDisposedException

flutter - TextField 的背景图片 - Flutter

dart - Dart 中的多行字符串