簡體   English   中英

使用gi-gtk和Reactive Banana捕獲Haskell異常

[英]Catching Haskell exceptions with gi-gtk and Reactive Banana

當然,我的應用程序沒有錯誤,但是如果它包含任何底部值,我想放入一個通用異常捕獲器,它至少會彈出一個消息框告訴用戶要報告什么類型的錯誤。 因為我正在使用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" ,我的程序剛退出並在控制台上打印了一條消息(我的用戶當然不會看到)。

當我對代碼響應GTK信號時,如何捕獲代碼中發生的異常?

有類似的問題在這里 (雖然它不是具體到gi-gtk ,所以是一個比較普遍)噸。 我也推薦這篇文章。

基本上,haskell異常不能通過haskell / C邊界。 僅僅因為C對haskell異常一無所知。

在您的情況下, Gtk.main運行gtk事件循環,它在C中實現,回調在haskell中實現。 當回調拋出haskell異常時,它必須經過gtk事件循環才能達到executeProgram函數。 但由於上述原因,這是不可能的。

我擔心,解決方案是捕獲每個回調中的所有異常。 在你的情況下,你可能可以on gi-gtk函數on編寫一個包裝器,它將捕獲所有異常並顯示錯誤對話框。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM