2013-08-29 47 views
18

Tôi có biểu thức không có kết quả trong Haskell. Tôi muốn gỡ lỗi và kiểm tra lý do tại sao nó không chấm dứt. Một kỹ thuật tôi đã học là sử dụng những điều sau đây trong GHCi:Tiếp tục gỡ lỗi trong GHC sau khi ngắt

Vì vậy, tôi có thể xem hướng dẫn đang chạy trong tính toán vô hạn. Vấn đề là tôi muốn tiếp tục tính toán với :step, bỏ qua ngắt. Tôi có thể làm điều đó?

Bất kỳ giải pháp nào khác để gỡ lỗi tính toán không kết nối? (Lịch sử lớn hơn 50 hồ sơ hay các hoạt động khác để giúp công việc.)

+0

Bạn có quen thuộc với cách đặt điểm ngắt trong mã tùy ý không? Tôi sẽ đặt một break ở đâu đó trong vòng lặp vô hạn và sử dụng nó để trải qua một lần lặp lại. – Maxander

+0

Có, nhưng vấn đề là tôi sẽ nhận được rất nhiều cuộc gọi sai. Ví dụ, tôi nghĩ rằng tôi đã có vị trí của chu kỳ vô hạn, nhưng mọi cuộc gọi hàm chỉ dẫn đến chu kỳ vô hạn trong 1% thời gian. –

Trả lời

1

Một điều tôi đã làm trong quá khứ là sử dụng unsafePerformIO để phá vỡ bất cứ khi nào tôi nhấn một phím:

Hãy nói rằng t là biểu hiện ban đầu của bạn , chèn x trong biểu thức:

import System.IO 
import System.IO.Unsafe 

t i = do print i; t (i+1) 
t2 i = do print i; x; t2 (i+1) 

x = do r <- hReady stdin 
     if r then do a<-hGetChar stdin 
        print a -- break on this line 
      else print "" 

Sau đó tại dấu nhắc ghci:

*Main> :break 9 
*Main> t2 0 

Bấm một bàn phím chính

*Main> :cont 

tiếp tục từ nơi bạn đã dừng lại.

+0

Điều này chỉ hoạt động với tính toán IO? –

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