繁体   English   中英

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

[英]Dart / Flutter - Debugger stops on caught exceptions

在检查 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()或取消选中调试侧栏中的选项以中断未捕获的异常(尽管显然这也会影响真正的未捕获异常——尽管在 Flutter 中它们不太常见,因为框架捕获了大多数异常)。

这是丹尼回答的补充图像(VS Code):

在此处输入图片说明

如果您想绕过异常以便应用程序不会停止,您可以取消选中左侧“断点”下的“未捕获的异常”框在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM