假设我有一个 C# WinForms 应用程序,并且它是由外部程序启动的,只需使用Process.Start(MyModule.exe)
.
我尝试使用以下命令来调试我的代码我的项目属性->Debug->开始行动->启动外部程序(设置正确工作目录当然)。
我的另一个尝试是Debug->附加到进程
UPDATE:我的模块和外部程序都使用一种资源。因此外部程序释放它,然后调用 Process.Start(),等待我的进程退出,然后再次捕获资源。所以当你的程序已经运行时我无法附加。
他们都失败了 - 断点程序.cs从未被击中。
那么,在这种情况下我该如何调试我的代码呢?
我知道有两种方法可以轻松解决这个问题。第一种方法是让你的程序请求一个调试器附加到它,作为它在 Main 中所做的第一件事Debugger.Launch() http://msdn.microsoft.com/en-us/library/vstudio/system.diagnostics.debugger.launch%28v=vs.110%29.aspx
public static void Main(string[] args)
{
Debugger.Launch();
//Rest of your code here
}
This will make a dialog like the following show up
这将允许您附加到正在运行的视觉工作室或启动一个新实例。
当您无法使用以前的方法(例如,我认为它在服务内部不起作用)时解决此问题的另一种方法是在代码开头放置一个循环,该循环将永远循环直到附加调试器,这给出了您有足够的时间执行您之前尝试过的“附加到进程”方法,而不让程序继续运行。
public static void Main(string[] args)
{
while(!Debugger.IsAttached)
{
Thread.Sleep(1000); //Sleep 1 second and then check again.
}
//Rest of your code here
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)