静态驱动程序验证程序诊断
SDV 具有诊断模式,可以帮助您和 Microsoft 解决 SDV 可能遇到的问题。 启用诊断模式后,SDV 会将信息记录到驱动程序项目中的一系列文件中,每个验证阶段和每个规则都有一个文件。
启用诊断功能
SDV 的诊断模式(也称调试模式)目前只能在命令行运行时启用。 有关从命令行运行的更多详情,请参阅静态驱动程序验证程序命令 (MSBuild)。
要激活诊断功能,请在 /check 命令后添加 /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/check[规则名]”子文件夹中找到。 该文件显示了 SDV 尝试使用操作系统模型和特定规则构建驱动程序的输出结果。
smvexecute-CheckRule.log:这些文件中的其中之一为 sdv 验证的每条规则而创建,可在 SDV 在驱动程序项目中创建的“sdv/check[规则名]”子文件夹中找到。 该文件显示 SDV 尝试根据驱动程序验证指定规则的输出结果。
您应在命令输出中查找与失败的阶段列表相对应的文件。 如果失败发生在 FinalCompile 或 CheckRule 步骤中,请务必检查文件夹中列出的失败的特定规则。