때로는 코드의 다른 위치에있는 여러 디버깅 세션에서 많은 수의 중단 점이 누적됩니다. 디버거가 중단 점을 중지 할 때를 효율적으로 어떻게 알 수 있습니까? 줄 번호와 소스 파일 이름을 잠재적으로 긴 중단 점 목록과 비교하기 위해 모든 단일 행에서 멈출 수는 없습니다.디버거 중단 점은 어떻게 효율적으로 구현됩니까?
이것은 Eclipse의 Java 디버거이지만 모든 디버거에는이 질문이 적용된다고 가정합니다.
때로는 코드의 다른 위치에있는 여러 디버깅 세션에서 많은 수의 중단 점이 누적됩니다. 디버거가 중단 점을 중지 할 때를 효율적으로 어떻게 알 수 있습니까? 줄 번호와 소스 파일 이름을 잠재적으로 긴 중단 점 목록과 비교하기 위해 모든 단일 행에서 멈출 수는 없습니다.디버거 중단 점은 어떻게 효율적으로 구현됩니까?
이것은 Eclipse의 Java 디버거이지만 모든 디버거에는이 질문이 적용된다고 가정합니다.
많은 디버거에서 사용되는 전략 (필자는 Eclipse에 대해 잘 모른다)은 기본적으로 서브 루틴 호출 또는 시스템 호출 인 중단 점 시점의 코드에 패치를 넣는 것입니다. 에 점프 한 코드는 중단 점 정보를 가지며 사용자 명령의 인쇄 또는 수락을 수행하며 패치로 덮어 쓰여진 코드를 가지므로 코드가 실행되어 중단 점없이 원래 코드와 일치하도록합니다.
는 Nadreck의 좋은 답변에 추가하려면 :
는 이국적인 물건의 일부를 포함하여 자세한 내용과 기사 here있다 (x86에서 특정 옵 코드, 하드웨어 브레이크 포인트).
디버거는 하드웨어 또는 소프트웨어로 중단 점을 구현합니다. 후자는 원래 명령어를 저장하고 예외를 생성하는 특수 코드를 삽입하며 예외가 발생하면 원래 명령어를 다시 삽입하여 브레이크 포인트가 히트되었음을 사용자에게 알려야합니다. 소프트웨어 중단 점에 대한 자세한 내용은 my article을 참조하십시오.
당신은 이클립스 디버거의 내부 및 방법 How to write an Eclipse Debugger
맨 아래 링크에서 하나를 작성하는 방법의 자세한 내용을 얻을 수 있습니다, 그것은 일부 대형 마법입니다. 디버거가 깊은 일을하고 있다는 것을 알았지 만, 깊은 생각은하지 못했습니다! – skiphoppy
반드시 전화가 필요한 것은 아닙니다. 가능한 경우 디버거가 처리하는 인터럽트를 발생시키는 명령으로 덮어 씁니다. –