2013-05-02 34 views
11

Nếu GHC mất nhiều thời gian để biên dịch một cái gì đó, có cách nào để tìm hiểu xem nó đang hoạt động không? Đầu tiên, nó sẽ là tốt đẹp để biết nếu tôi đã thực sự bị rơi trình biên dịch (tức là, đặt nó vào một số loại vòng lặp vô hạn bằng cách nào đó), hoặc cho dù nó thực sự tiến bộ, nhưng chỉ rất chậm.Giám sát hoạt động của GHC

Thứ hai, thật tuyệt khi biết chính xác phần nào của quá trình biên dịch GHC gặp sự cố. Đó có phải là phân tích cú pháp, hoặc loại bỏ, hoặc kiểm tra kiểu, hoặc tối ưu hóa hoặc tạo mã, hoặc ...?

Có cách nào để theo dõi những gì đang xảy ra không? (Lưu ý rằng nếu GHC mất nhiều thời gian, điều đó có thể có nghĩa là nó đang làm rất nhiều công việc, vì vậy nếu bạn yêu cầu quá nhiều đầu ra, nó sẽ là lớn!)

GHC đã cho bạn biết mô-đun nào nó đang cố gắng biên dịch lại. Trong trường hợp của tôi, vấn đề là một mô-đun độc lập. Tôi muốn biết GHC đang gặp khó khăn ở đâu.

+1

Bạn có thể xây dựng một phiên bản cấu hình của GHC và sau đó sử dụng các công cụ profiling tiêu chuẩn để xem những gì nó là đến sau khi thực tế. – Davorak

+5

Bạn có thể yêu cầu trò chuyện bằng cách chỉ định độ dài '-v4' cho bạn biết ** nhiều ** những gì đang diễn ra - có, đầu ra sẽ rất lớn, nhưng nếu bạn chỉ muốn theo dõi nó, hãy để nó thiết bị đầu cuối, thường chỉ ghi nhớ 1000 dòng cuối cùng. –

+1

Theo kinh nghiệm của tôi, GHC đi vào vòng lặp vô hạn có thể được nhận ra bởi vì bất cứ thứ gì có hiệu quả, nó sẽ làm việc chậm chạp, khiến cho nó ăn nhiều bộ nhớ ... –

Trả lời

4

Theo nhận xét của Daniel Fischer, tôi đã thử chạy GHC với các tùy chọn độ dài khác nhau.

  • -v1: Sản xuất nhiều hơn một chút, nhưng không có gì trong bước biên dịch chính.
  • -v2: Cho bạn biết bước GHC hiện đang thực hiện (trình phân tích cú pháp, desugar, kiểm tra loại, bộ mô phỏng, v.v ...). Điều này là khá nhiều những gì tôi thực sự muốn.
  • -v3: Xuất hiện để làm cho simpli thực sự đổ những gì nó đang làm cho bàn điều khiển - ý tưởng tồi khi biên dịch 8MB mã nguồn!

Vì vậy, có vẻ như -v2 là nơi bắt đầu.

(Trong trường hợp cụ thể của chương trình đã thúc đẩy câu hỏi này, có vẻ như GHC đang dành mãi mãi trong giai đoạn kiểm tra kiểu.)

+0

Nếu kiểm tra kiểu, nó có thể bị kẹt trong một vòng lặp vô hạn trường hợp không thể xác định. Suy luận kiểu cũng có thể là một vấn đề, vì suy luận của H-M có độ phức tạp thời gian xấu nhất * khủng khiếp *. Đó là những lý do hợp lý duy nhất tôi có thể nghĩ đến. Bạn đã từng giải quyết vấn đề chưa? –

+0

@ C.A.McCann Tôi chỉ đang cố gắng biên dịch một tệp nguồn _huge_. Nó không chứa bất cứ điều gì đặc biệt bất thường, nó chỉ rất, rất lớn. Tôi "giải quyết" vấn đề bằng cách làm cho nó nhỏ hơn nhiều. – MathematicalOrchid

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