2017-08-14 13 views
8

Tôi đang viết một tập hợp các lỗ rò không gian ví dụ trong Haskell và muốn viết một bộ thử nghiệm để bắt chính mình trong trường hợp tôi chèn bất kỳ ví dụ nào thực sự không bị rò rỉ.Kiểm tra xem hàm Haskell có bị rò rỉ không gian

Có cách nào để kiểm tra các ví dụ mà không thực hiện một tệp thực thi riêng biệt cho từng mẫu không?

+4

Neil Mitchell có một kỹ thuật rất hiệu quả và rất thấp công nghệ được mô tả trên blog của mình: [Phát hiện Space Rò rỉ ] (http: // neilmitchell.blogspot.com/2015/09/detecting-space-leaks.html). – Cactus

+0

Trong một số tương lai, bạn có thể kiểm tra điều này bằng cách sử dụng các máy phân tích tĩnh :) Nếu điều này có thể được chính thức hóa thì phát hiện rò rỉ không gian chỉ là vấn đề thực hiện thuật toán. – Shersh

+0

@Cactus: Đó là một bài viết tuyệt vời. Thật không may tôi không biết nếu nó có thể bắt các trường hợp ngoại lệ được tạo ra khi bạn hết bộ nhớ (có ý nghĩa). Tôi đã thử tạo ra ngoại lệ trong một tiến trình khác với 'System.Posix.process.forkProcess' và bắt nó bằng' ClassyPrelude.catchAny', nhưng nó vẫn trượt qua và làm hỏng bộ kiểm thử. – seagreen

Trả lời

2

Bạn có thể phát hiện rò rỉ không gian có kiểm tra, nhưng bạn không thể chứng minh sự vắng mặt của rò rỉ không gian. Ngay cả khi hồ sơ bộ nhớ tương đối thấp, nó chỉ có thể chỉ ra rằng không gian bị rò rỉ rất nhỏ và bạn đã không thực hiện đủ lặp lại.

Phát hiện rò rỉ không gian bạn có thể sử dụng giới hạn phân bổ và quầy như mô tả ở đây May I limit memory usage per function/monad/thread in Haskell?

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