2

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

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

4

1 回答 1

2

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

页堆

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

调试

要在每次启动时在调试器下运行程序,您可能需要使用 Image File Execution Options 下的 Debugger 设置。您也可以使用 GFlags 设置它。勾选Image File选项卡中的Debugger复选框(在指定 EXE 名称并点击选项卡之后)并输入调试器的路径。

这种机制的工作方式是(某处)内部CreateProcess有一个测试是否为您尝试运行的程序设置了 IFEO\Debugger,如果设置了,则执行 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给目标程序(如此所述)。

所以你看,没有必要在任何地方为你正在调试的程序设置命令行参数,而是在你运行它的任何地方。

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

注意事项

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

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

如果那不影响你很好。如果是这样,另一种方法可能是在程序开头添加未处理的异常,并将 WinDbg 设置为事后调试器 ( AeDebug)

于 2016-02-07T22:18:23.170 回答