【发布时间】:2012-12-11 18:50:56
【问题描述】:
我在 Dart 中编写了一个网络服务器,并且有一个关于异常的问题。在我的 HttpServer 请求处理程序中,我在整个方法周围添加了一个 try-catch 块:
try{
...
} catch(e) {
...
}
所以我希望这可以防止任何客户端请求使网络服务器崩溃。问题在于,当从该块中抛出某些异常(大量嵌套在其他模块中,但仍从该块启动)时,它可能崩溃。以下是此类异常的示例:
Unhandled exception:
FutureUnhandledException: exception while executing Future
Illegal argument(s)
original stack trace:
#0 _StringBase._createFromCodePoints (dart:core-patch:1403:3)
#1 _StringBase.createFromCharCodes (dart:core-patch:1400:33)
#2 String.String.fromCharCodes (dart:core-patch:1788:43)
#3 _StringDecoderBase.decoded (dart:io:6485:12)
#4 _File.readAsString.<anonymous closure> (dart:io:1307:29)
#5 _FutureImpl.transform.<anonymous closure> (bootstrap:881:37)
#0 _FutureImpl._complete (bootstrap:844:11)
#1 _FutureImpl._complete (bootstrap:848:5)
#2 _FutureImpl._setException (bootstrap:873:14)
#3 _CompleterImpl.completeException (bootstrap:948:30)
#4 _FutureImpl.transform.<anonymous closure> (bootstrap:884:36)
#5 _FutureImpl._complete (bootstrap:840:19)
#6 _FutureImpl._complete (bootstrap:848:5)
#7 _FutureImpl._setValue (bootstrap:862:14)
#8 _CompleterImpl.complete (bootstrap:945:26)
#9 _File.readAsBytes.<anonymous closure> (dart:io:1281:25)
#10 _BaseDataInputStream._checkScheduleCallbacks.issueCloseCallback (dart:io:6345:59)
#11 _Timer._createTimerHandler._handleTimeout (dart:io:6918:28)
#12 _Timer._createTimerHandler._handleTimeout (dart:io:6926:7)
#13 _Timer._createTimerHandler.<anonymous closure> (dart:io:6934:23)
#14 _ReceivePortImpl._handleMessage (dart:isolate-patch:37:92)
为什么这不会在 try-catch 块中被捕获?它在从其中调用的代码中抛出(即使它没有显示在堆栈跟踪中)。
我希望我错过了一些关于异常如何在 Dart 中工作的内容,所以我希望你能启发我 :)
【问题讨论】:
-
可以添加try块的内容吗?
-
抱歉,如果我必须包含与异常相关的所有调用代码,那将是数千行... 这是一个非常复杂的 Web 服务器,此异常在处理基于 Web 的 IDE 后端的模块。我希望有人能告诉我类似的事情,我需要做更多的事情来捕捉“期货”中的异常,或者它必须发生在创建未来的地方......如果我尝试读取 .png 文件,则会生成异常作为文本。
标签: dart