2009-03-23 52 views
31

Tôi đã sử dụng trình sửa lỗi ghci nhưng thực sự thích nếu nó được tích hợp với một trình soạn thảo văn bản để đơn giản hóa quá trình thiết lập các điểm ngắt. Nó có lẽ không nên đánh giá đúng mọi biến có thể nhìn thấy nhưng ít nhất là đơn giản hóa quá trình xem xét trạng thái cục bộ.Cách tốt để gỡ lỗi mã haskell là gì?

Gần đây tôi đã tìm thấy hàm theo dõi đã hữu ích bằng cách cho phép gỡ lỗi bản in từ những nơi khó khăn khác.

+1

Có lẽ bạn đã đọc nó, nhưng chỉ để tham khảo: http://www.haskell.org/haskellwiki/Debugging – sastanin

Trả lời

8

Có, lối vào cho trình gỡ lỗi GHCi sẽ là một điều tốt. Có lẽ chúng tôi sẽ hoàn thành công việc trong Hackathon tiếp theo. Tuy nhiên, trong thời gian có nghĩa là:

  • The Monad Reader, Issue 10 (PDF) có bài viết về cách sử dụng trình gỡ lỗi. Có lẽ điều đó có thể cho bạn thêm một vài gợi ý.

Ngoài ra, Haskell tự vay chính nó để thử nghiệm từ dưới lên bằng QuickCheck. Tức là, kiểm tra các thành phần của bạn riêng lẻ, sau đó đặt chúng lại với nhau. Nếu mã của bạn là thuần túy thì điều này thường chỉ hoạt động.

+5

Nhưng thường, "đặt chúng lại với nhau" là nơi mà sự cố xảy ra. – RnMss

12

Cách tốt để gỡ lỗi mã Haskell là viết và kiểm tra các luật đại số bằng cách sử dụng QuickCheckSmallCheck. Đã có một số kẻ lừa đảo Haskell bao gồm Hat, Hood, và Freya, nhưng không ai trong số họ đã được coi là đủ giá trị để có giá trị duy trì trong một thời gian dài.

Khi đó là Haskell, bạn phải suy nghĩ khác nhau về cách thực hiện. Tài liệu ICFP trên trang QuickCheck có một số ví dụ hay để bạn bắt đầu. Nếu bạn muốn một ví dụ thế giới thực xmonad được gỡ rối rộng rãi bằng QuickCheck.

+1

Liên kết kiểm tra nhanh đang đưa ra lỗi 403. (05 Tháng Mười, 03:38:04 UTC) Nếu đây không phải là lỗi tạm thời, ai đó có thể đăng liên kết mới –

+0

Đây là liên kết kiểm tra nhanh được cập nhật; (www.cs -> www.cse): http://www.cse.chalmers.se/~rjmh/QuickCheck/ – SuperElectric

+26

Tôi có thể trân trọng lưu ý rằng có sự khác biệt giữa gỡ lỗi và thử nghiệm không?Gỡ lỗi là tìm nguyên nhân của một lỗi, trong khi thử nghiệm đang tìm kiếm sự tồn tại của lỗi. – kristianp

5

Xin lưu ý rằng Debug.trace sẽ KHÔNG là bạn của bạn khi gỡ lỗi chương trình đa luồng.

Thử nghiệm là cách để đi trong thời gian dài.

3

Vì mục đích của riêng tôi, tôi thấy rằng đó là sự kết hợp của các yếu tố.

  1. Viết dễ dàng để gỡ lỗi mã chức năng, điều này có nghĩa là đảm bảo chức năng của bạn tương đối nhỏ (5-20 dòng) và chỉ thực hiện một điều được xác định rõ ràng.
  2. Sử dụng HUnit để xác định các trường hợp kiểm tra sẽ đưa ra các vấn đề của bạn.

Như đã thấy trong các câu trả lời khác, rất nhiều người yêu thích QuickCheck. Tôi đã tìm thấy nó khó khăn để xác định các trường hợp kiểm tra QuickCheck có ý nghĩa cho ít nhất một số mã của tôi vì vậy thường sử dụng nhiều hơn các bài kiểm tra đơn vị tiêu chuẩn. Điều đó đang được nói, có một giới thiệu tuyệt vời để sử dụng QuickCheck trong Chapter 11 của Real World Haskell.

Nếu bạn thấy mình sử dụng cả QuickCheck và HUnit, bạn có thể muốn xem xét test-framework.

Các vấn đề liên quan