GFlags - 命令行

时间:2016-02-04 19:32:43

标签: debugging windbg gflags

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

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

1 个答案:

答案 0 :(得分:2)

你没有。你混淆了很多不相关的东西。

页堆

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

调试

要在每次启动时在调试器下运行程序,您可能希望使用“映像文件执行选项”下的“调试器”设置。您也可以使用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\Debuggers\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之后的所有内容传递给目标程序(如上所述GFlags and PageHeap)。

所以你看,没有必要为你正在调试的程序设置命令行参数,无论你在哪里运行它。

PageHeap和IFEO \ Debugger之间的唯一联系是你可以通过GFlags实用程序控制它们。

注意事项

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

  • 调用者从CreateProcess获取WinDbg的句柄,而不是目标进程(以及进程ID等)。
  • 非默认STARTUPINFO参数中的任何信息都适用于WinDbg,而不是目标进程。我估计lpEnvironment也是如此。

如果这对你影响不大。如果是,则替代方案可能是在程序开头添加未处理的异常,并将WinDbg设置为事后调试器(AeDebug