Windows下如何让程序启动时等待调试器(含子进程调试场景)
Windows下让程序启动后等待调试器的方案(无需修改程序)
针对程序A启动程序B、需在B启动后执行前附加调试器的场景,以下是几种无需修改程序的实现方法:
1. 注册表调试器挂钩(Windows原生机制)
通过系统注册表项强制为指定程序绑定调试器,启动时自动暂停等待:
- 以管理员身份打开命令提示符,执行命令:
其中reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\B.exe" /v Debugger /t REG_SZ /d "ntsd.exe -g -G"ntsd.exe是Windows自带的命令行调试器,-g参数跳过初始断点,-G参数避免进程退出时弹出提示框。设置完成后,程序A启动B.exe时,系统会先启动ntsd并附加到B,此时B会处于暂停状态,你可以直接用ntsd调试,或打开WinDbg等图形化调试器附加到该B.exe进程。 - 调试完成后必须清理注册表项,否则B.exe每次启动都会触发调试器:
reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\B.exe" /f
2. 使用GFlags工具可视化配置
GFlags是Windows调试工具集的可视化配置工具,操作更直观:
- 若未安装,需先下载安装Windows SDK中的「调试工具」组件。
- 打开GFlags,切换到「Image File」选项卡,输入
B.exe的完整路径(或文件名,若在系统路径中),勾选「Debugger」选项,填入常用调试器的路径(例如C:\Program Files\Debugging Tools for Windows\x64\windbg.exe)。 - 保存设置后,程序A启动B.exe时,系统会自动启动指定调试器并附加到B,此时B会暂停在入口点前,等待调试操作。
- 调试结束后,回到GFlags取消该程序的调试器配置即可。
内容的提问来源于stack exchange,提问作者Max Abernethy
相关产品推荐
相关产品推荐

