엔진과 상호 작용

명령 및 식

디버거 엔진 API는 명령을 실행하고 WinDbg의 디버거 명령 창에 입력된 것과 같은 식을 평가하는 메서드를 제공합니다. 디버거 명령을 실행하려면 실행을 사용합니다. 또는 파일에서 모든 명령을 실행하려면 ExecuteCommandFile을 사용합니다.

Evaluate 메서드는 C++ 또는 MASM 구문을 사용하여 식을 평가합니다. 디버거 엔진이 식을 평가하는 데 사용하는 구문(예: Evaluate 메서드)은 GetExpressionSyntax에서 제공하며 SetExpressionSyntaxByNameSetExpressionSyntax를 사용하여 변경할 수 있습니다. 디버거에서 인식되는 다양한 구문의 수는 GetNumberExpressionSyntaxes에서 반환되며 해당 이름은 GetExpressionSyntaxNames에서 반환됩니다.

Evaluate에서 반환되는 값의 형식은 평가된 문자열에 사용된 기호 및 상수에 의해 결정됩니다. 값은 DEBUG_VALUE 구조체에 포함되며, CoerceValue 및 CoerceValues를 사용하여 다른 형식으로 캐스팅할 수 있습니다.

별칭

별칭은 디버거 명령 및 식에서 사용될 때 자동으로 다른 문자열로 대체되는 문자열입니다. 별칭에 대한 개요는 별 칭 사용을 참조하세요. 디버거 엔진에는 여러 클래스의 별칭이 있습니다.

고정 이름 별칭은 숫자로 인덱싱되며 이름이 $u 0, $u 1, ..., $u 9입니다. 이러한 별칭의 값은 SetTextMacro 메서드를 사용하여 설정할 수 있으며 GetTextMacro 메서드를 사용하여 검색할 수 있습니다.

자동 별칭 및사용자 이름 별칭은 모든 이름을 가질 수 있습니다. 자동 별칭은 디버거 엔진에 의해 정의되며 사용자 이름 별칭은 사용자가 디버거 명령 또는 디버거 엔진 API를 통해 정의합니다. 사용자 이름 별칭을 정의하거나 제거하려면 SetTextReplacement 메서드를 사용합니다. GetTextReplacement 메서드는 자동 별칭 또는 사용자 이름 별칭의 이름과 값을 반환합니다. RemoveTextReplacements 메서드를 사용하여 모든 사용자 이름 별칭을 제거할 수 있습니다. GetNumberTextReplacements 메서드는 사용자 이름 및 자동 별칭 수를 반환합니다. GetTextReplacement와 함께 이러한 모든 별칭을 반복하는 데 사용할 수 있습니다. OutputTextReplacements 메서드는 이름 및 값을 포함하여 모든 사용자 이름 별칭 목록을 출력합니다.

사용자 이름 별칭에 자동 별칭과 동일한 이름이 지정되면 사용자 이름 별칭은 자동 별칭을 숨기므로 이름으로 별칭 값을 검색할 때 사용자 이름 별칭이 사용됩니다.

>엔진 옵션

엔진에는 동작을 제어하는 다양한 옵션이 있습니다. 이러한 옵션은 DEBUG_ENGOPT_XXX 나열됩니다. GetEngineOptions에서 반환되며 SetEngineOptions를 사용하여 설정할 수 있습니다. AddEngineOptions를 사용하여 개별 옵션을 설정하고 RemoveEngineOptions를 사용하여 설정을 해제할 수 있습니다.

인터럽트

인터럽트는 디버거를 강제로 중단하거나 WinDbg에서 Ctrl+Break를 눌러 엔진에 현재 명령 처리를 중지하도록 지시하는 방법입니다.

디버거에 대한 중단을 요청하거나 디버거의 현재 작업을 중단하려면 SetInterrupt를 사용합니다. 인터럽트가 있는 경우 검사 GetInterrupt를 사용합니다.

참고 디버거 확장에서 긴 작업을 수행할 때 확장은 정기적으로 GetInterrupt를 검사 인터럽트가 요청된 경우 처리를 중지하는 것이 좋습니다.

디버거에 대한 중단을 요청할 때 대상에서 중단을 수행하는 데 너무 오래 걸리면 엔진 시간이 초과될 수 있습니다. 이는 대상이 응답하지 않는 상태이거나 리소스 경합으로 인해 중단 요청이 차단되거나 지연되는 경우에 발생할 수 있습니다. 엔진이 대기하는 시간은 GetInterruptTimeout 에서 반환되며 SetInterruptTimeout을 사용하여 설정할 수 있습니다.