如何在调试模式下启动解决方案中的另一个项目

时间:2009-12-06 21:25:45

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

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

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

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

目前正在使用Process.Start()启动主机应用程序。

每次都不能将它附加到调试器上,我正在寻找更实用的解决方案。

4 个答案:

答案 0 :(得分:1)

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

System.Diagnostics.Debugger.Launch();

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

答案 1 :(得分:1)

您无需修改​​源代码即可完成此操作。在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中运行良好。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

#if debug

// Do stuff
if(!System.Diagnostics.Debugger.IsAttached)
{
System.Diagnostics.Debugger.Launch();
}
System.Diagnostics.Debugger.Break();

#endif