/ Windows / 297浏览

如何使用 DbgView 来查看调试信息

背景

在驱动开发调试过程中,经常用到需要查看输出。最简单的方式就是采用 DebugView(DbgView.exe)来查看输出。

准备

  • DbgView.exe 存在于 Sysinternals Suit 中,通常只需要下载 Sysinternals Suit 中即可。详情可参考:Sysinternals Suite - Windows Sysinternals | Microsoft Docs
  • 在注册表的 HKLMSYSTEMCurrentControlSetControlSession Manager 下增加一个 Debug Print Filter 的键(这个键通常不存在)。在新建的键中,添加一个 DEFAULT 的 DWORD 值,并将其值设置为 8(理论上说,只要位3置位的任意值均可)。—-Windows Vista 后的系统都需要。如下图
  • 重启!重启!重启!
  • 对于驱动而言,需要使用管理员权限打开 DbgView.exe,并且在 Capture 中勾选上 Capture Kernel。最好不要选中Capture Win32和Capture Global Win32,这样来自各个进程的输出不会搞乱显示。

代码输出打印

在驱动中,可通过 KdPrint 宏的方式来打印。如:

KdPrint(("Driver unload calledn"));

KdPrint 实际会在 DBG 下通过调用 DbgPrint 来输出,所以后面的参数跟 printf 保持一致即可。定义如下:

需要注意:KdPrint 后会跟两层括号,是因为宏不支持不定参数,所以通过这种骚操作来绕过。

#if DBG 

#define KdPrint(_x_) DbgPrint _x_

#else 

#define KdPrint(_x_)

#endif

💡 如果没有打印,应该是内核调试输出未开启。通过 ed nt!Kd_DEFAULT_MASK 0xffffffff 开启。

Windows是如何区分互联网下载文件和本地文件的
Windows是如何区分互联网下载文件和本地文件的
如何低成本的获取到应用卡顿情况
如何低成本的获取到应用卡顿情况
【译】ETW 堆跟踪 – 每个分配都被记录
【译】ETW 堆跟踪 – 每个分配都被记录
【译】Wait Analysis – 寻找空闲时间
【译】Wait Analysis – 寻找空闲时间
如何通过 ETW Provider 来记录应用日志
如何通过 ETW Provider 来记录应用日志
如何通过 C++ 实时监听 ETW 事件
如何通过 C++ 实时监听 ETW 事件

0

  1. This post has no comment yet

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注