Tùy chọn GHCi -fbreak-on-exception
có thể hữu ích. Đây là một phiên gỡ lỗi ví dụ. Trước tiên, chúng tôi tải tập tin của chúng tôi vào GHCi.
$ ghci Broken.hs
GHCi, version 7.0.2: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Loading package ffi-1.0 ... linking ... done.
[1 of 1] Compiling Main (Broken.hs, interpreted)
Ok, modules loaded: Main.
Bây giờ, chúng tôi bật -fbreak-on-exceptions
và theo dõi biểu hiện của chúng tôi (main
trong trường hợp này cho toàn bộ chương trình).
*Main> :set -fbreak-on-exception
*Main> :trace main
Stopped at <exception thrown>
_exception :: e = _
Chúng tôi đã dừng lại ở một ngoại lệ. Hãy thử xem mã với :list
.
[<exception thrown>] *Main> :list
Unable to list source for <exception thrown>
Try :back then :list
Vì ngoại lệ xảy ra trong Prelude.head
, chúng tôi không thể xem trực tiếp nguồn. Nhưng như GHCi thông báo cho chúng tôi, chúng tôi có thể đi :back
và cố gắng liệt kê những gì đã xảy ra trước đó trong dấu vết.
[<exception thrown>] *Main> :back
Logged breakpoint at Broken.hs:2:23-42
_result :: [Integer]
[-1: Broken.hs:2:23-42] *Main> :list
1
2 main = print $ head $ filter odd [2, 4, 6]
3
Trong thiết bị đầu cuối, biểu thức vi phạm filter odd [2, 4, 6]
được tô đậm phông chữ. Vì vậy, đây là biểu thức được đánh giá vào danh sách trống trong trường hợp này.
Để biết thêm thông tin về cách sử dụng trình gỡ lỗi GHCi, hãy xem the GHC User's Guide.
bạn sử dụng interpiter hoặc trình biên dịch nào? – Sudantha
i sử dụng: GHC 7.0.3 – haskellNewcommer
Hy vọng điều này sẽ giúp bạn [Làm thế nào để “gỡ rối” Haskell với printfs?] [1] [1]: http://stackoverflow.com/questions/3546592/how-to-debug-haskell-with-printfs – Sudantha