当然,我的应用程序没有错误,但以防万一它包含我想放入通用异常捕获器中的任何底部值,它至少会弹出一个消息框告诉用户要报告哪种错误。因为我使用的是gi-gtk,所以我认为初始化后的任何异常都会从函数内部发生Gtk.main,所以我的函数的结尾main看起来像这样:
let executeProgram =
catch Gtk.main $ \e -> do
reportThisBugDialog $ show (e :: SomeException)
-- Code here to try to recover to a known good state
executeProgram
executeProgram
我也在使用Reactive Banana以防万一,但这在 FRP 代码之外。
但是,这不会捕获任何异常。我error "Test Exception"为“Help About”添加了处理程序,我的程序刚刚退出,并在控制台上打印了一条消息(我的用户当然不会看到)。
当我的代码对 GTK 信号做出反应时,我如何捕获发生在我的代码中的异常?