windbg

获取

看一下 pageheap 针对的是什么问题? 堆调试工具——pageheap的使用和原理分析

pageheap 和 gflags 什么关系?前者被包含到了后者中。

This version of GFlags includes the functionality of PageHeap (pageheap.exe), a tool that enables heap allocation monitoring in Windows.

如何安装 gflags?安装 WinDbg

GFlags is included in the Debugging Tools for Windows 10 (WinDbg).

如何 获取 WinDbg

  • 在安装过程中,通过 win 10 sdk 的方式(无论是通过 msvc2019 还是直接安装 win10 sdk)都没有成功。

  • 最终单独安装的 Windows Driver Kit (WDK)

    Step 2: Install WDK for Windows 10, version 1903

使用

PageHeap / GFlags 使用,只涉及两三条命令。使用Gflags来检测heap问题

1
2
3
4
5
6
7
8
9
10
11
#配置正常页堆:
gflags.exe /p /enable myapp.exe

#配置完全页堆:
gflags.exe /p /enable myapp.exe /full

#列出当前启动了页堆的进程列表:
gflags.exe /p

#取消页堆设置:
gflags.exe /p /disable myapp.exe

然后启动 myapp.exe 似乎就能精准定位到异常位置了。可是我在 msvc 中运行 release 只收获了“应用程序无法正常启动(0xc0000142)”,底部“输出框”中打印

程序“[1896] test.exe”已退出,返回值为 -1073741502 (0xc0000142) ‘DLL Initialization Failed’。

中间曲折的尝试不再絮说,来看 GFlags 的一个参数 /debug 描述

By default, this parameter uses the NTSD debugger with the command line ntsd -g -G -x and with page heap enabled, but you can use the DebuggerCommand variable to specify a different debugger and command line.

关键就在于“调试器”是有很多种类的,windows 上并非只有 visual studio !

没能够掌握如何通过命令行指定 vsjitdebugger.exe,只能通过 gflags-gui

Windbg的gflags.exe – Attach调试利器
Windbg的gflags.exe调试堆栈溢出,访问越界等问题

延伸

WinDbg

  • Debugging Using WinDbg
  • Debugging Using KD and NTKD
  • Debugging Using CBD and NTSD