我正在尝试在 64 位 Windows 7 上调试 32 位程序。
所以我使用 gflags 为该应用程序设置调试器。我填写了应用程序的路径,以及调试器的路径。但是当我启动应用程序时,WinDBG 没有运行。
相同的配置适用于 32 位 Windows 7。
那么,在 64 位环境下调试 32 位应用程序是不可能的吗?
对我来说,这一直有效,即使我使用了“错误的”架构 gflags。
但是 Windbg 必须在 PATH 中,或者在将调试器指定给 gflags 时必须包含路径。
这是一个老问题。旧版本的 gflags 用于将设置存储在以下位置之一:
HTML\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
或者
HTML\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
根据您为 gflags.exe 选择的体系结构,它将影响 64 位或 32 位进程。
显然,在某些时候(感谢@Thomas Weller 指出),微软改变了 gflags 的行为,现在(2016 年 11 月)当前版本的 gflags.exe 写入 32 位和 64 位注册表位置,而与架构无关。
这有点问题,因为我曾经使用将 32 位调试器附加到 32 位进程,将 64 位调试器附加到具有相同进程名称的 64 位进程。现在我不能为此使用 gflags。但是解决方法是直接修改Image File Execution Options
.
gflags.exe 的处理器架构实际上很重要。如果您使用 64 位版本的 Windows 调试工具并从那里启动 gflags.exe,它将影响 64 位应用程序的行为。同样,如果您使用 32 位版本的 Windows 调试工具并启动 gflags.exe,它会影响 32 位应用程序。
32 位和 64 位版本可以并排安装。密切关注您正在调试的应用程序的位数,并使用与调试器/工具相同的架构。