Windows内核编程
上QQ阅读APP看书,第一时间看更新

3.2 调试构建与发布构建

跟用户模式项目一样,内核模式驱动程序也能用调试或者发布模式构建。其区别跟用户模式下也类似—调试构建默认不进行优化,但容易调试。发布构建利用编译器的优化更快地生成代码,但这会导致生成的目标代码和原始代码不完全一致。

在内核的术语中,准确的说法应该是检查(调试)和自由(发布)。虽然Visual Studio内核项目沿用了调试/发布的术语,但在旧的文档中使用的是检查/自由术语。从编译角度看,内核的调试构建定义了符号DBG并将其值设置为1(相对于在用户模式下定义的_DEBUG符号)。这使我们在条件编译中可以用DBG符号来区分调试构建和发布构建。事实上,KdPrint宏就是这么干的:在调试构建时编译为对DbgPrint的调用,在发布构建时什么都不编译,其结果就是KdPrint调用在发布构建下是无效果的。这通常就是我们想要的效果,因为这些调用相对来说比较昂贵。我们会在第10章讨论一些其他记录日志的途径。