与引擎交互

命令和表达式

调试器引擎 API 提供执行命令和评估表达式的方法,如在 WinDbg 的调试器命令窗口中 键入的表达式。 若要执行调试器命令 ,请使用 Execute。 或者,若要执行文件的所有命令,请使用 ExecuteCommandFile

Evaluate 方法使用 C++ 或 MASM 语法计算表达式。 调试器引擎用于计算表达式的语法(如 Evaluate 方法中的语法)由 GetExpressionSyntax 提供,可以使用 SetExpressionSyntaxByNameSetExpressionSyntax 进行更改。 调试器识别的不同语法的数量由 GetNumberExpressionSyntaxes 返回,其名称由 GetExpressionSyntaxNames 返回

Evaluate 返回的值 的类型由计算 字符串中使用的符号和常量确定。 该值包含在一 个DEBUG_VALUE结构中 ,可以使用 CoerceValueCoerceValues 强制转换为不同的类型

别名

别名 是字符串,在调试器命令和表达式中使用时,会自动替换为其他字符串。 有关别名的概述,请参阅 使用别名。 调试器引擎具有多个别名类。

固定 名称别名按 数字编制索引,其名称$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 进行设置