我有一个WCF主机应用程序,它由一个带有一些动态参数的可执行文件启动。
现在我想调试这个应用程序,但由于它是由其他工具启动的,因此VS.NET不会在调试模式下加载它。
是否可以编写一些仅限DEBUG的代码来强制它在DEBUG模式下执行此过程,这样它就会达到断点。
目前正在使用Process.Start()
启动主机应用程序。
每次都不能将它附加到调试器上,我正在寻找更实用的解决方案。
答案 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