无聊的笔记

1.今天写驱动时突然发现DbgPrint在windbg里并没有输出,依稀记得那天唐鹏老哥说的ed Kd_Default_Mask 8就可以输出了。之前只是记住这个命令就完事了,但是今天突然想了解一下为啥要这么写。顺利的在winddbg帮助文档中找到了相应的资料。

                    

  原来我们用DbgPrintEx或者KdPrintEx输出的时候的第一个参数选择的是对应的ComponentId,第二个参数为Level。我们可以在windbg中通过修改Kd_(ComponentId)_Mask的值(这个值被widnbg称为importance bit field)来决定相应的消息是否被输出。

 

  以上就是Level的一些定义的值,在windbg文档中写到:当0<=Level<=31时,Level被视为shift bit,即importance bit field = Level<<1。当32<=Level<=0xffffffff时,importance bit field = Level。当我们在DbgPrintEx或者KdPrintEx中设置的Level转换成相应的importance bit field之后与我们在windbg设置的Kd_(ComponentId)_Mask值进行and运算之后不为0,那么这个消息将被输出。

  

  

  在windbg文档中发现在windows vista之后DbgPrint和KdPrint的Componetid为DEFAULT,Level被设置为DPFLTR_INFO_LEVEL(即importance bit field = 3<<1 = 0x8),但我们在windbg查看Kd_Default_Mask时发现为0x1,这就是为什么我们DbgPrint消息被过滤的原因。因此我们只要将Kd_Default_Mask and 0x8 = 0x1即可输出(因此0x8,0xA,0x18,0xfffffff等等都可以输出)。

  --------------更多详细的资料请阅读windbg文档“Reading and Filtering Debugging Messages”

猜你喜欢

转载自www.cnblogs.com/DreamoneOnly/p/11392041.html
今日推荐