2012-05-12 4 views
2

를 디버깅하는 방법 나는 다음과 같은 문제가있다, 우리는 심지어 그것을 고전 하나를 호출 할 수 있습니다 어디서 어떻게 알아. 이제 매개 변수를 변경 불가능하게 만드는 것이 바람직 할 것이라는 것을 알고 있습니다. 그러나 매개 변수가 문제의 근원입니다. 예를 들어, myMethod 내부의 메소드는 몇 가지 유효성 검사를 수행하기위한 것이지만 일부는 더 잘 수행합니다. 이는 설계 상 잘못되었습니다.이클립스 입력 매개 변수 변경

그래서이 매개 변수 Map의 특성이 변경되면 실행이 일시 중지되는이 메서드에서 중단 점을 만드는 방법에 대한 질문이 있습니다. 각 메소드 호출 후에 조건부 중단 점을 두는 것이 좋습니다.하지만 20 가지 방법이있는 경우에는 다소 고통 스럽습니다.

이 입력 매개 변수가 변경되면 어떻게 디버깅합니까?

답변

2

원하는 것은 "감시 점"이라고합니다. 실제로이 기능이 존재한다는 것을 알지 못했고 Eclipse Project에서 작업하곤했습니다. 이 필드를 편집 해되고 있는지 파악해야 다음 위의 도움말 문서를 사용하여 "쓰기"감시 점을 설정합니다 같은

http://help.eclipse.org/indigo/index.jsp?topic=%2Forg.eclipse.cdt.doc.user%2Ftasks%2Fcdt_t_add_watch.htm

는 것 같습니다.

또한 이클립스는 수정 된 변수를 강조 표시하므로 메서드 호출을 한 단계 씩 건너 뛰면 어떤 값이 수정되고 어떤 필드가 수정되는지 확인할 수 있습니다 (강조 표시되기 때문에 밝은 노란색, 기본적으로) "디버그"관점의 "변수"탭에 있습니다. 데이터를 수정하는 경우 어떤 방법을 알고 나면 다시 디버그를 실행할 수 있지만 이번에는 값을 변경하는 방법을 디버깅하고 문제가 발생할 때까지 계속 반복합니다.

+0

나는 시계 패널을 언급했지만 watchpoint는 정확한 용어이다. 그리고 변경 사항이있을 때 강조 표시 할 수 있도록 실제로 표시 할 수 있음을 잊었습니다. +1 – jmort253

+0

나는 결코 이것을 사용하지 않았다. 그래서 나는 그것을 줄 것이다. –

1

이것은 매우 큰 검색 공간으로 시작하여 검색 공간이 충분히 좁아서 문제를 찾을 수있을 때까지 체계적으로 체계적으로 범위를 좁히는 전형적인 문제 해결 시나리오입니다.

지도가 잘못 수정되는 지점을 찾으려면 먼저 myMethod의 상위 레벨부터 시작해야 할 수 있습니다. myMethod 메소드 내부에서 호출되는 메소드 주위에 중단 점을 두십시오. 각 중단 점에서 맵의 내용을보십시오. Eclipse에는 특정 시점에서 모든 변수의 내용을 볼 수있는 가변 시계 패널이 있습니다.

뭔가 잘못되었을 때 중단 점을 맞았을 때. 중지. 이제 데이터가 중단 점에서 변경되었다고 가정하면 someOtherObject.method(parameter);을 파헤치는 것을 알 수 있습니다.

이제 someotherObject.method에는 내부에 다른 메소드가있을 것입니다. 이 메소드 내부에 중단 점을 넣고 함수 호출을 모두 처리하고 프로세스를 반복하십시오. 더 이상 메소드가 남아 있지 않을 때까지 반복을 계속하십시오. 결국, 문제의 범위를 좁히고 답을 얻을 것입니다.

불행히도 이러한 유형의 문제에 대한 "내 코드 수정"마법은 없습니다. 좋은 낡은 셜록 홈즈 (Sherlock Holmes) 스타일 조사 기술과 추론을 통해 근본 원인을 파악할 수있는 더 작은 섹션을 남겨두기 전까지 문제가 아닌 코드 영역을 제거합니다.어떤 코드 수정이 허용되지 않는 경우

+0

예, 당신이 옳을 수도 있지만 설명대로 당신이 큰지도를 가지고 있고 당신이 정말로 오른쪽 상단에있는 변화를 당신의 눈으로 볼 수 없다면 많은 시간이 걸립니다 프로그래밍 방식으로 보이지 않는 것 같습니다 IDE가 값이 변경되거나 추가되었는지 알려주기에는 너무 복잡합니다. –

+0

상황에 따라 다르지만 경우에 따라 감시 점이 응답 인 것 같습니다. – jmort253

+0

아니요, 아니요 :(메소드 중단 점을 시도했지만 입력 상태의 초기 상태를 "저장하는"방법을 모르겠습니다. 매개 변수 때문에 컬렉션을 비교할 항목이 없기 때문에 컬렉션의 크기조차도 볼 수 없습니다. 구식 스타일이 작동한다는 것을 알고 있습니다. 매우 편리하지는 않습니다. 조금 어색해 졌을 수도 있습니다. –

0

, 당신은

  • 이 특정 맵 인스턴스에서 변화를보고 acattle에 의해 기술 된 감시 점 방법을 사용하거나
  • 는 (그 상태를 변경하는지도 방법에 중단 점을 가지고 당신이 경우 여러 인스턴스에 대해 그렇게하고 싶습니다.) 지도 코드가 바이너리 만 상관 없습니다. Ctrl-Shift-T (열기 유형)를 사용하여 여전히 열 수 있으며, 개요보기에서 put (...) 또는 remove (...)와 같은 메소드를 선택하고 윤곽선보기의 컨텍스트 메뉴를 사용하여 중단 점을 추가하십시오.
관련 문제