静态驱动程序验证程序诊断

SDV 具有诊断模式,可帮助你和 Microsoft 排查 SDV 可能遇到的问题。 启用诊断模式后,SDV 会将消息记录到驱动程序项目中的一系列文件中,每个验证阶段和规则各一个。

启用诊断

SDV 的诊断模式 (也称为调试模式) 当前只能在从命令行运行时启用。 有关从命令行运行的详细信息,请参阅 静态驱动程序验证程序命令 (MSBuild)

若要激活诊断,请在 /检查 命令后面添加 /debug 标志。 例如:

msbuild /t:sdv /p:Inputs="/check:* /debug" mydriver.VcxProj /p:Configuration="Release" /p:Platform=x64

启用诊断将显著增加命令窗口的输出,以及创建特定日志文件。

了解对角线

SDV 将在执行的每个阶段创建多个文件,其中会提供有关该步骤的详细信息。 当 SDV 在执行中途失败时,它不会为后续阶段创建任何对角线文件。

创建的文件按顺序排列:

  • smvexecute-NormalBuild.log:它位于驱动程序的源目录中,显示 SDV 首次尝试生成驱动程序的输出,而无需额外的检测和分析。

  • smvexecute-InterceptedBuild.log:它位于驱动程序的源目录中,显示添加了分析挂钩的 SDV 生成驱动程序的输出。

  • smvcl.log:它位于 SDV 在驱动程序项目中创建的“sdv”目录中。 它显示 InterceptedBuild 步骤的编译器输出。 如果在 smvexecute-InterceptedBuild.log 中看到故障,则可以在 smvcl.log 中找到其他详细信息。

  • smvexecute-Scan.log:它位于 SDV 在驱动程序项目中创建的“sdv”目录中。 它显示了 SDV 尝试扫描驱动程序以查找入口点的输出。 此处的错误可能指示找不到入口点,应更新函数 roletypes 或 sdv-map.h。 有关详细信息,请参阅 使用函数角色类型声明批准 Sdv-map.h 文件

  • smvexecute-FinalCompile.log:为 sdv 验证的每个规则创建其中一个文件,可以在驱动程序项目中 SDV 创建的“sdv\检查[rule name]”子文件夹中找到。 此文件显示 SDV 尝试使用 OS 模型和特定规则生成驱动程序的输出。

  • smvexecute-CheckRule.log:为 sdv 验证的每个规则创建其中一个文件,可以在驱动程序项目中 SDV 创建的“sdv\检查[rule name]”子文件夹中找到。 此文件显示 SDV 尝试针对驱动程序验证指定规则的输出。

应在命令输出中查找与阶段列表对应的文件,因为失败。 如果失败发生在 FinalCompileCheckRule 步骤中,请确保检查列为失败的特定规则的文件夹。