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

date
Nov 23, 2023
slug
how-to-view-debuginfo-by-dbgview
status
Published
tags
Debug
summary
本文介绍了在驱动开发调试过程中如何使用 DebugView(DbgView.exe)来查看输出。首先需要下载 Sysinternals Suite 中的 DbgView.exe 工具,然后在注册表的 HKLM\SYSTEM\CurrentControlSet\Control\Session Manager 下增加一个 Debug Print Filter 的键,并设置其值为 8。对于 Windows Vista 及之后的系统,需要进行重启。在打开 DbgView.exe 时,需要使用管理员权限,并在 Capture 中勾选 Capture Kernel 以查看驱动的输出信息。在驱动中,可以使用 KdPrint 宏来打印输出,需要注意 KdPrint 后面会跟两层括号。如果没有打印输出,可能是因为内核调试输出未开启,可以通过命令 "ed nt!Kd_DEFAULT_MASK 0xffffffff" 来开启。
type
Post

背景

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

准备

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

代码输出打印

在驱动中,可通过 KdPrint 宏的方式来打印。如:
KdPrint 实际会在 DBG 下通过调用 DbgPrint 来输出,所以后面的参数跟 printf 保持一致即可。定义如下:
需要注意:KdPrint 后会跟两层括号,是因为宏不支持不定参数,所以通过这种骚操作来绕过。
💡
如果没有打印,应该是内核调试输出未开启。通过 ed nt!Kd_DEFAULT_MASK 0xffffffff 开启。
 

© Frend Guo 2022 - 2024