f
frendguo.

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

本文介绍了在驱动开发调试过程中如何使用 DebugView(DbgView.exe)来查看输出。首先需要下载 Sysinternals Suite 中的 DbgView.exe 工具,然后在注册表的 HKLMSYSTEMCurrentControlSetControlSession Manager 下增加一个 Debug Print Filter 的键,并设置其值为 8。对于 Windows Vi

目录
背景准备代码输出打印

背景#

在驱动开发调试过程中,经常用到需要查看输出。最简单的方式就是采用 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 宏的方式来打印。如:

text
KdPrint(("Driver unload calledn"));

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

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

text
#if DBG 

#define KdPrint(_x_) DbgPrint _x_

#else 

#define KdPrint(_x_)

#endif

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

── END ──
↑ Back to topSubscribe
← NEWER
线程同步的方式
OLDER →
进程的创建和终止

还没有评论。下面留下第一条吧。

+ 留个评论
提交后由管理员审核 · 通常 24h 内显示
Jul 25Windows 权限相关概念解析4m →Mar 25Windows是如何区分互联网下载文件和本地文件的6m →Feb 25如何低成本的获取到应用卡顿情况3m →