debugging - GFlags - 命令行

标签 debugging windbg gflags

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

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

最佳答案

你不知道。而且你混淆了一些非常不相关的事情。

页面堆

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

调试

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

所以您会看到,无论您在何处运行,都无需为您正在调试的程序设置命令行参数。

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

注意事项

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

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

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

关于debugging - GFlags - 命令行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35209951/

相关文章:

c++ - 可以检查 NULL 取消引用的调试软件?

.net - 是否可以将任意(包括动态创建的)程序集从 windbg 转储到文件中?

c++ - gflags 链接器错误 : undefined reference

linux - caffe 重新编译 libgflags.a 并出现 -fPIC 错误

Xcode 4.3.2不会在调试器中显示完整的调用程序堆栈,而仅显示当前功能?

flash - 使用 Flash + AS3 发布/调试配置

c++ - `sizeof` C++ 应用程序中的所有类型

ios - 真机调试访问NSDocumentDirectory

linux - 内核 - 从 Linux 系统调试 Windows 客户机系统 - 安装程序不工作