如何以编程方式在与父项相同的Visual Studio调试会话中启动子进程?

在调试器下运行进程时,我想在同一个调试器中启动子进程。

目前,我用

Process.Start("sample.exe"); 

我希望它是这样的:

 if (Debugger.IsAttached) // start "sample.exe" in the same debugging session else Process.Start("sample.exe"); 

我可以将一个标志传递给子进程,该进程指示它调用Debugger.Launch() ,但这不会捕获启动错误,并且会导致调试会话中某些function未启用(例如编辑和继续,等等)。 调试器最好直接启动进程。

您应该将调试器附加到您正在启动的进程中。 这可以做到:

  1. 启动“sample.exe”后从Visual Studio手动选择它菜单Debug> Attach to process ..
  2. 以编程方式将调试器附加到“sample.exe”中
  3. 使用VS.NET自动化模型附加到进程
  4. 更新:您可以设置Windows环境以在每次“sample.exe”启动时附加调试器: 自动启动调试器 (无论如何都需要调用Debugger.Break)
  5. 一些外部工具可能

以下是附加调试器的“sample.exe”代码:

 if (!Debugger.IsAttached) Debugger.Launch(); Debugger.Break(); 

您应该将一些参数传递给“sample.exe”以validation是否需要附加调试器。

 Process.Start("sample.exe", "Debug=true"); 

您可以更改解决方案的属性以启动多个应用程序。

这里有一个解释是运行多个项目

MSDN文章是关于运行多个项目的MSDN文章

假设sample.exe将是您要调试的代码的主机,您可以使用项目属性 – >调试设置 – 选择操作作为外部程序并提供sample.exe的路径。 VS将启动此可执行文件并将调试器附加到它。

Visual Studio Debugger Team创建了一个自动执行此扩展的扩展: https ://marketplace.visualstudio.com/items ? itemName = vsdbgplat.MicrosoftChildProcessDebuggingPowerTool