【问题标题】:How to start a child process in the same Visual Studio debugging session as the parent, programmatically?如何以编程方式在与父进程相同的 Visual Studio 调试会话中启动子进程?
【发布时间】:2011-01-27 08:59:00
【问题描述】:

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

目前,我使用

Process.Start("sample.exe");

我希望它是这样的:

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

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

【问题讨论】:

  • 我怀疑这个问题的标题有很大的误导性——你是想用 VS 开始这个过程,还是用恰好使用 VS 构建的 C# 应用程序?
  • 你问的没有任何意义。
  • 问题在于 Visual Studio 不会自动附加到开箱即用的子进程。不过有解决方案。
  • 威尔:两者都不是。我试图从用 c# 构建的应用程序启动一个进程,但在 VS 中以调试模式运行。所以在某种程度上你的陈述都是有效的。
  • 一个更简单的解决方案是在sample.exe的项目中调用Main。

标签: c# .net visual-studio debugging


【解决方案1】:

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

  1. 在启动“sample.exe”后手动从 Visual Studio 中选择它菜单调试 > 附加到进程..
  2. 以编程方式在“sample.exe”中附加调试器
  3. Attaching to a Process using VS.NET Automation Model
  4. 更新:您可以设置 windows 环境以在每次“sample.exe”启动时附加调试器:Launch the Debugger Automatically(无论如何您都需要调用 Debugger.Break)
  5. 可能是一些外部工具

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

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

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

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

【讨论】:

  • 它启动了另一个 VS。是否可以在同一个 VS 实例中使用它。
  • 好吧,从来没有想过这个。启动另一个 VS 是默认行为。顺便说一句,我找到了在调试模式下启动进程而不修改它的好方法。
  • @lazyberezovsky 但这需要打开新的 VS。如果子进程项目已经存在于同一个解决方案中,我们如何在同一个 Visual Studio 实例中执行此操作?谢谢
  • 如果启动的程序恰好与启动器相同,VS10(至少)不会打开新实例。在这种情况下,第一步是最简单的,但在选择第二步时,将程序作为调试编译,显然不需要"Debug=true"
【解决方案2】:

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

这里有解释Run Multiple projects

MSDN 文章在这里MSDN Article on running multiple projects

【讨论】:

  • 如果所有进程同时启动,这是一个很好的解决方案。但是,如果子进程可以在稍后的某个时间启动,它将无法工作。
【解决方案3】:

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

【讨论】:

  • 它是一个程序化的开始,因为它是程序逻辑的一部分。
【解决方案4】:

Visual Studio 调试器团队创建了一个自动执行此操作的扩展: https://marketplace.visualstudio.com/items?itemName=vsdbgplat.MicrosoftChildProcessDebuggingPowerTool

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-06
    • 2018-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-13
    • 1970-01-01
    • 2015-04-27
    相关资源
    最近更新 更多