DebugView 不捕获 KdPrint 输出

Posted

技术标签:

【中文标题】DebugView 不捕获 KdPrint 输出【英文标题】:DebugView doesn't capture KdPrint output 【发布时间】:2020-11-25 02:29:04 【问题描述】:

我无法让 DbgView.exe 在我的 Windows 10 64 位 v2004 虚拟机上正常工作。如果使用 KdPrint,该程序不会从驱动程序中捕获任何内核消息,但使用 DbgPrint 可以正常工作。我已经尝试过“bcdedit /debug on”,在注册表编辑器上添加“调试打印过滤器”并重新启动,启用详细的内核输出。 我也试过在我的主机上,同样的结果。 是一个很简单的驱动,只能装卸,抄自Windows Kernel Programming一书。

这行得通

DbgPrint("Driver initialized.\n");

这不是

KdPrint(("Driver initialized.\n"));

任何帮助将不胜感激!

【问题讨论】:

【参考方案1】:

跳转到KdPrint,你会看到一个预处理魔法:

#if DBG 

#define KdPrint(_x_) DbgPrint _x_
#define KdPrintEx(_x_) DbgPrintEx _x_ 
#define vKdPrintEx(_x_) vDbgPrintEx _x_
#define vKdPrintExWithPrefix(_x_) vDbgPrintExWithPrefix _x_
#define KdBreakPoint() DbgBreakPoint() 

#define KdBreakPointWithStatus(s) DbgBreakPointWithStatus(s)

#else 

#define KdPrint(_x_)
#define KdPrintEx(_x_) 
#define vKdPrintEx(_x_)
#define vKdPrintExWithPrefix(_x_)
#define KdBreakPoint() 

#define KdBreakPointWithStatus(s)

#endif // DBG wudfwdm

这意味着如果您使用 Release 配置进行编译(DBG 宏将不会被定义),KdPrint 将不会发生任何事情。

所以这不是 DbgView 的问题。

【讨论】:

【参考方案2】:

即使使用调试编译的驱动程序,winPE (dbgview64.exe) 上的 dbgView 4.90 也不会打印 KdPrint,除非您同时单击 Capture、Capture Kernel 和 Capture、Enable Verbose Kernel Output。

【讨论】:

以上是关于DebugView 不捕获 KdPrint 输出的主要内容,如果未能解决你的问题,请参考以下文章

DebugView 简单使用

在 C# 中捕获调试输出

DebugView工具使用方法

DebugView工具使用方法

WinDriver问题.WIN7以上版本,DbgPrint,KdPrint在Checked build 环境下没有输出

log4cxx OutputDebugString DebugView dbgview