与引擎交互
命令和表达式
调试器引擎 API 提供执行命令和评估表达式的方法,如在 WinDbg 的调试器命令窗口中 键入的表达式。 若要执行调试器命令 ,请使用 Execute。 或者,若要执行文件的所有命令,请使用 ExecuteCommandFile。
Evaluate 方法使用 C++ 或 MASM 语法计算表达式。 调试器引擎用于计算表达式的语法(如 Evaluate 方法中的语法)由 GetExpressionSyntax 提供,可以使用 SetExpressionSyntaxByName 和 SetExpressionSyntax 进行更改。 调试器识别的不同语法的数量由 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 进行设置。