2012-01-29 4 views
2

저는 하스켈을 처음 사용하고 있으며 디버깅 할 때 성가신 행동을하고 있습니다.GHCi - 두 번째 실행에서 중단 점을 건너 뜁니다.

  1. 내가 사용하여 내 브레이크 포인트를 추가 :
  2. 내가 도망 주요
  3. 모든 휴식 괜찮
  4. 내가 입력 : 실행

에게 내가 주 다시 실행, 중단 점을 완료 계속 더 이상 충돌하지 않지만 중단 점이 제거되지 않았기 때문에 제거되지 않았습니다. 누가 무슨 일이 일어날 지 알고 있니?

저는 우분투 11.10, 64 비트입니다. 나는 내일 다른 환경에서 그것을 테스트 할 것이다.

감사

+0

사용중인 GHCi 버전을 게시하면 도움이 될 것입니다. –

+2

코드를 보지 않고서는 알기가 어렵지만, 게으른 평가로 인해 결과가 캐시되기 때문에 두 번째 주 실행시 중단 점에 도달하지 않을 가능성이 높습니다. 처음에는 THUNK (일시 중지 된 평가) 였고 두 번째 평가는 이미 평가되었습니다. – danr

+0

@danr, 맞습니다. 모든 입력은 상수이므로 처음 실행 한 후에는 모든 것이 캐시되어야합니다. 모듈을 다시로드 할 수는 있지만 불행히도 모든 중단 점을 제거합니다. 답을 쓰면 받아 들일 것입니다. –

답변

2

그것은 코드를 보지 않고 알 어렵지만,이 결과 때문에 게으른 평가의 캐시 때문에 주요 중단 점의 두 번째 실행에 도달하지 않습니다 가능성이 울립니다. 처음에는 THUNK (일시 중지 된 평가) 였고 두 번째 평가는 이미 평가되었습니다.

0

재 계산을 피하기 위해 상수 양식은 해당 redex에 대한 간접 참조로 바뀝니다.

예를 들어 'papperlap'의 오른쪽 부분은 '4'를 가리키는 간접 노드로 바뀝니다. 당신은 '즐'에 중단 점을 설정하고 'papperlap'를 요청하는 경우

bla x = x + 1 
papperlap = bla 3 

두 번 당신은 '즐'은 한 번만 적용되는 것을 볼 수 있습니다. 그러나 'bla 3'을 두 번 묻는다면 두번 멈출 것입니다 :

*Main> :break bla 
Breakpoint 0 activated at meerbla.hs:1:1-13 
*Main> papperlap 
Stopped at meerbla.hs:1:1-13 
_result :: a = _ 
[meerbla.hs:1:1-13] *Main> :continue 
4 
*Main> papperlap 
4 
*Main> bla 3 
Stopped at meerbla.hs:1:1-13 
_result :: a = _ 
[meerbla.hs:1:1-13] *Main> :continue 
4 
*Main> bla 3 
Stopped at meerbla.hs:1:1-13 
_result :: a = _ 
[meerbla.hs:1:1-13] *Main> :continue 
4 
관련 문제