【问题标题】:How to start another project in the solution in Debug mode如何在调试模式下在解决方案中启动另一个项目
【发布时间】:2009-12-06 21:25:44
【问题描述】:

我有一个 WCF 主机应用程序,它由带有一些动态参数的可执行文件启动。

现在我想调试这个应用程序,但由于它是由其他工具启动的,VS.NET 不会在调试模式下加载它。

是否可以编写一些仅 DEBUG 的代码来强制它在 DEBUG 模式下执行此过程,以便它会遇到断点。

目前它使用Process.Start() 来启动宿主应用程序。

每次都将其附加到调试器不是一种选择,我正在寻找更实用的解决方案。

【问题讨论】:

  • 请不要使用“vs.net”标签。您已经在这里待了足够长的时间来了解更多。
  • 抱歉刚刚注意到visual-studio标签现在会使用它,不知道。

标签: c# .net visual-studio wcf debugging


【解决方案1】:

尝试在您的 WCF 应用中添加此行:

System.Diagnostics.Debugger.Launch();

如果应用程序没有在调试器下运行,您会看到一个窗口询问您是否要调试应用程序。

【讨论】:

  • 它不会加载源代码和相关项目,它就像附加调试器一样,非常困难。不知何故,我无法选择当前的 VS.NET 实例进行调试,这将解决问题。
  • 您是否使用调试符号编译它们,它们是否与 WCF 应用程序的 dll 一起提供?
  • 您提到它不允许您选择当前的 VS.net 实例进行调试...您是否在 DEBUG 模式下运行当前实例?如果它处于调试模式,它应该附加到正在运行的那个......
  • 诀窍是我需要同一个项目的 2 个实例,它不能将它附加到同一个 VS.NET 实例。
【解决方案2】:

你可以在不修改源代码的情况下做到这一点。在 Visual Studio 中打开自动启动的项目并设置断点。启动 Regedit.exe 并将密钥添加到“HKLM\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options”,其名称与您的 .exe 完全相同。添加一个名为“Debugger”的新字符串值,将其设置为“c:\Windows\system32\vsjitdebugger.exe”。 .reg 文件示例:

REGEDIT4
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\ConsoleApplication1.exe]
"Debugger"="\"c:\\Windows\\system32\\vsjitdebugger.exe\""

现在,当您的应用启动进程时,会显示 JIT 调试器提示。选择已加载自动启动项目的 Visual Studio 实例。执行将在断点处停止。请注意,您通常必须自己将焦点更改回 VS。

Mike Stall 警告说,此技巧不适用于仅托管调试。我无法重现,它在 VS2008 SP1 中运行良好。

【讨论】:

【解决方案3】:

VS.NET 宏非常强大。我认为您可以很容易地编写附件脚本。

【讨论】:

    【解决方案4】:
    #if debug
    
    // Do stuff
    if(!System.Diagnostics.Debugger.IsAttached)
    {
    System.Diagnostics.Debugger.Launch();
    }
    System.Diagnostics.Debugger.Break();
    
    #endif
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多