2014-01-27 40 views
1

我有一個包含本機代碼的haskell包。但是,當我通過FFI進行交互時,我會遇到異常(有時會出現段錯誤)。Haskell應用崩潰:處理本機異常

是否有可能在haskell方面處理本機異常。我在一些情況下嘗試使用catch/catchIOError沒有任何成功。

在這種情況下,我還想調試只有的本機代碼。我如何使用Haskell/FFI使用本地調試器?

有時,段錯誤可能發生在C代碼中。能夠調試這些代碼會有很大的幫助。

+3

段錯誤是不是你可以捕獲和恢復的東西。就像Windows的「死亡藍屏」一樣,這意味着您的應用程序幾乎必須關閉。所以沒有,沒有辦法趕上這樣的事情,繼續跑步。 – MathematicalOrchid

+0

我改變了問題,使其更具體(並希望清楚)。我更感興趣的是找到原生部分的問題,以及如果我做錯任何事情,特別是編組價值。 –

+1

@MathematicalOrchid你可以從段錯誤中恢復,問題就是要做什麼。例如,我已經實現了一個使用segfault作爲讀寫屏障的垃圾回收器。 – augustss

回答

2

如果您認爲錯誤出現在C中的組件中,請使用gdb。你應該能夠在你的C代碼中設置斷點並進入它。編譯你的代碼,只需運行gdb dist/build/myprogram/myprogram(或任何地方)。

你也可以看看valgrind檢測思想,如分配的內存不釋放。