我的Visual Studio解决方案包含两个C ++控制台项目,'A'和'B',其中'A'以编程方式启动B(使用CreateProcess())。
如果我在创建'B'之后开始单步执行'A',我怎样才能检测到'B'项目中的断点并停在?
目前我只是在'B'中的特定点粘贴“DebugBreak()”,但这很烦人,因为通常需要一段时间弹出该窗口,允许您使用VS实例调试应用程序,并且通常它不会显示当前实例,因此我必须启动另一个需要更长时间的实例。
我无法使用附加处理,因为'B'启动,执行它然后关闭太快。
是否有任何标记要自动附加的项目,例如我可以在main的开头有一个断点(类似于main开头的DebugBreak)?
答案 0 :(得分:0)
我在MSDN上发现了这个说明:
调试器不会自动附加到由调试进程启动的子进程,即使子项目位于同一解决方案中也是如此。调试子进程:
- 启动后附加到子进程。
- - 或 -
- 将Windows配置为在调试器的新实例中自动启动子进程。
后者显然可以通过一些注册表干预来完成: Automatically start a process in the debugger
答案 1 :(得分:0)
Visual Studio团队发布了一个Visual Studio扩展,允许自动将子进程附加到当前调试器:Introducing the Child Process Debugging Power Tool。
Visual Studio 2013及更高版本的Gallery可以使用它。
因此,您可以使用Process.Start
从项目A启动项目B,它会自动将调试器附加到第二个过程。