2011. 10. 25. 15:20

직역하면 스택이 초과해서 오류가 났다는 소리입니다.

 

연관글 영역

 

 

1. 증상 확인

보통 컨트롤같은 곳에 무한루프로 바인딩하거나 잘못된 값(필드를 불러와야 하는데 속성을 불러온다든가 할 때 발생합니다.

 

일부로 무한루프를 돌려 오류를 재현해 봅시다.



일반적으로 위처럼 눈에 딱 보이게 무한루프가 도는 경우는 거의 없습니다.
(눈에 보이게 저런 에러를 낸다는 건 정말 초보적인 실수죠 ㅎㅎㅎ)

 

 

2. 일어나는 상황들

흔히 겪는 경우로
1) 오버 로딩 함수를 잘못 불러와 자기 자신을 호출하고 있다.
2) 자신이 전역에서 쓰이는 경우 전역에서 다시 자신을 호출한다.
3) 자신에서 몇 단계 거처 다시 나 자신을 호출한다. (A->B->C->A)
4) 데이터 바인딩 시 바인딩 조건에 의해 같은 함수가 무한으로 호출된다.
5) 반복문에 빠져나가는 조건이 없다.

6) 반복문에 빠져나가는 조건은 있는데 적중할 수 없거나 스택이 차기 전에 적중하지 않는 경우

등등


이런 경우입니다.
문제는 일반적으로 이것이 무한루프인 것을 찾는 게 쉬운 문제는 아닙니다 ㅡ.-;
(위에서 말했다 싶이 눈에 잘 보이면 초보적인 실수입니다 ㅎㅎ)

 

 

3. 찾는 방법

무한루프인지 아닌지를 체크하기 위해서는 무한루프가 의심 가는 곳에서 다음과 같은 방법을 써봅니다.

 

1) 로그를 찍어본다.

2) 중단점을 잡고 한 단계씩 따라간다.

 

무한루프로 의심되는 곳을 맞게 찾았다면 어느 순간 다시 중단점이 있는 줄로 실행 중인 줄이 오게 됩니다.

이렇게 1번의 루프를 찾았으면 루프 되는 코드를 따라가면서 중간에 루프를 빠져나가기 위한 조건이 있는지 확인하면 됩니다.

 

 

마무리

계속하는 이야기지만 쉽게 찾을 수 있는 경우는 많지 않습니다.

보통 여러 단계를 걸쳐 참조되어 루프가 도는 경우 많이 발생하기 때문에 예상하지 못한 무한루프가 발생하는 경우가 대부분이기 때문에 그렇습니다.

짬과 운에 맡겨야 하죠 ㅎㅎㅎ