Debugging GFlags-命令行

Debugging GFlags-命令行,debugging,windbg,gflags,Debugging,Windbg,Gflags,我想启动一个使用命令行的进程。使用gflags,我希望启用页面堆,并允许windbg在每次启动时附加到进程 如何在gflags UI中添加命令行参数?您没有。你把一些不相关的东西混在一起了 页面堆 要启用堆验证(“PageHeap”),可以使用GFlags实用程序设置所需的配置,可以使用GUI或向其传递相应的命令行参数(请参阅)。无论哪种方式,此设置都会对所有具有您定义的名称的二进制文件进行全局设置 调试 要在每次启动时都在调试器下运行程序,可能需要使用“图像文件执行选项”下的调试器设置。您也可

我想启动一个使用命令行的进程。使用gflags,我希望启用页面堆,并允许windbg在每次启动时附加到进程


如何在gflags UI中添加命令行参数?

您没有。你把一些不相关的东西混在一起了

页面堆 要启用堆验证(“PageHeap”),可以使用GFlags实用程序设置所需的配置,可以使用GUI或向其传递相应的命令行参数(请参阅)。无论哪种方式,此设置都会对所有具有您定义的名称的二进制文件进行全局设置

调试 要在每次启动时都在调试器下运行程序,可能需要使用“图像文件执行选项”下的调试器设置。您也可以使用GFlags进行设置。勾选图像文件选项卡中的调试器复选框(在指定EXE名称并点击选项卡后),然后输入调试器的路径

该机制的工作方式是(在
CreateProcess
中的某个地方)测试是否为您试图运行的程序设置了IFEO\Debugger,如果设置了,则执行调试器值中的任何设置**,并传递原始命令行*

所以如果你设定

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\foo.exe\Debugger
要成为
C:\Program Files(x86)\Windows Kits\10\debugers\x64\windbg.exe
,然后尝试执行
C:\Users\d_blk\Desktop\foo.exe-param 1-param 2
,Windows将运行

C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\windbg.exe C:\Users\d_blk\Desktop\foo.exe -param 1 -param 2
WinDbg将
foo.exe
之后的所有内容传递给目标程序(如上所述)

因此,您可以看到,无需为正在调试的程序设置命令行参数,只需在运行该程序的任何地方进行调试

PageHeap和IFEO\Debugger之间的唯一连接是,您可以通过GFlags实用程序控制它们

警告 请注意使用IFEO\Debugger的所有常见注意事项。例如:

  • 调用方从
    CreateProcess
    获取WinDbg的句柄,而不是目标进程(和进程ID等)
  • 非默认
    STARTUPINFO
    参数中的任何信息都适用于WinDbg,而不是目标进程。我想,lpEnvironment也是这样

如果这对你没有影响,那就太好了。如果确实如此,另一种方法可能是在程序开始时添加未处理的异常,并将WinDbg设置为事后调试程序(
AeDebug

一旦选中页面堆且调试器字段指向WinDbg,调试器将自动附加到进程。你可以像平常一样开始你的过程。(您也可以在debugger字段中指定,如果这是您的意思。)gflags作为名称代表全局标志global,适用于每次启动的系统(每次启动时,每个启动注册表标志或特定可执行文件的内核标志0或permenant)(映像执行选项)它是一个独立的可执行文件,只需启动并忘记它,您设置的标志将被windbg使用,而无需每次为标志提供命令行