세션 및 실행 모델 디버깅

디버거 엔진은 동시에 여러 대상을 디버그할 수 있습니다. 디버깅 세션은 엔진이 대상을 획득할 때 시작되며 모든 대상이 삭제될 때까지 계속됩니다. 현재 대상이 일시 중단될 때 대상이 실행되고 액세스할 수 있는 동안 디버깅 세션에 액세스할 수 없습니다. 엔진은 세션에 액세스할 수 있는 동안에만 대상을 검사하고 조작하는 데 사용할 수 있습니다.

디버거의 기본 루프는 일반적으로 실행 상태 설정하고 WaitForEvent 메서드를 호출하고 생성된 이벤트를 처리하는 것으로 구성됩니다. WaitForEvent가 호출되면 세션에 액세스할 수 없게 됩니다.

대상에서 이벤트가 발생하면 엔진은 모든 대상을 일시 중단하고 세션에 액세스할 수 있게 됩니다. 그런 다음 엔진은 이벤트의 이벤트 콜백에 알리고 이벤트 필터 규칙을 따릅니다. 이벤트 콜백 및 이벤트 필터는 대상에서 실행을 진행하는 방법을 결정합니다. 엔진이 디버거에 침입해야 한다고 판단하면 WaitForEvent 메서드가 반환되고 세션에 계속 액세스할 수 있습니다. 그렇지 않으면 엔진은 이벤트 콜백 및 이벤트 필터에 의해 결정되는 방식으로 대상 실행을 다시 시작하고 세션에 다시 액세스할 수 없게 됩니다.

특히 WaitForEvent 호출 기간 동안 이벤트 콜백에 알리고 필터 규칙을 처리하는 동안 엔진은 "대기 중"이라고 하는 상태입니다. 이 상태에서 WaitForEvent 를 호출할 수 없습니다(재진입되지 않음).

대상에서 실행을 시작하는 데는 실행 상태 설정한 다음 WaitForEvent를 호출하는 두 단계가 있습니다. 실행 상태 SetExecutionStatus 메서드를 사용하거나 실행 상태 설정하는 디버거 명령을 실행하여 설정할 수 있습니다(예: g(Go)p(Step)).

디버거 명령 시퀀스가 함께 실행되는 경우(예: "g ; ? @$ip"--해당 명령이 시퀀스의 마지막 명령이 아닌 경우 대상에서 실행해야 하는 명령 이후에 암시적 대기 가 발생합니다. 디버거 엔진이 "대기 중" 상태일 때는 암시적 대기가 발생할 수 없습니다. 이 경우 명령의 실행이 중지되고 현재 명령(암시적 대기를 발생시키려고 시도한 명령)은 대상에서 실행이 어떻게 진행되어야 하는지를 나타내는 표시로 해석됩니다. 나머지 명령은 삭제됩니다.

참고 세션에 액세스할 수 있는지 아니면 액세스할 수 없는지 결정할 때는 엔진에서 대상의 제한된 실행(예: 단계적 실행)을 실행하는 것으로 간주됩니다. 제한된 실행이 완료되면 세션에 액세스할 수 있게 됩니다.

호스트 엔진

원격으로 디버깅할 때 디버거 엔진의 여러 인스턴스를 사용할 수 있습니다. 정확히 이러한 인스턴스 중 하나는 디버깅 세션을 유지 관리합니다. 이 instance 호스트 엔진이라고 합니다.

모든 디버거 작업은 호스트 엔진(예: 기호 로드 및 확장 로드)을 기준으로 합니다.