我正在尝试在64位Windows 7上调试32位程序。
所以我使用gflags为该应用设置调试器。我填写应用程序的路径,以及调试器之一。但是当我启动应用程序时,WinDBG不会运行。
相同的配置适用于32位Windows 7。
那么,在64位环境下调试32位应用程序是不可能的吗?
答案 0 :(得分:2)
对我而言,即使我使用“错误的”架构gflags,这也始终有效。
但是Windbg必须在PATH中,或者在为gflags指定调试器时必须包含路径。
答案 1 :(得分:0)
这是一个老问题。较旧版本的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位版本可以并排安装。密切关注您正在调试的应用程序的位数,并使用相同的调试器/工具架构。