C# 在VS2010调试器中重新启动程序
我有一个应用程序,偶尔需要您在更改首选项后重新启动它。为此,我打电话:C# 在VS2010调试器中重新启动程序,c#,visual-studio-2010,debugging,process,C#,Visual Studio 2010,Debugging,Process,我有一个应用程序,偶尔需要您在更改首选项后重新启动它。为此,我打电话: System.Diagnostics.Process.Start(Application.ResourceAssembly.Location); 这对于发布的版本来说很好,但是当我调试时,这真的很烦人,每当我需要更改首选项时,它都会在调试器外部重新启动程序 经过一些研究,我尝试从代码附加到调试器,但我尝试运行的代码已经在调试器中运行,应用程序很快就会被终止。因此,我编写了一个外部程序,可以在重新启动应用程序(并释放调试器)
System.Diagnostics.Process.Start(Application.ResourceAssembly.Location);
这对于发布的版本来说很好,但是当我调试时,这真的很烦人,每当我需要更改首选项时,它都会在调试器外部重新启动程序
经过一些研究,我尝试从代码附加到调试器,但我尝试运行的代码已经在调试器中运行,应用程序很快就会被终止。因此,我编写了一个外部程序,可以在重新启动应用程序(并释放调试器)后调用该程序,该应用程序应该将调试器附加到调试器上。不幸的是,这也不能真正起作用。它似乎连接到调试器,但实际上不允许我进行任何调试。如果我试图暂停执行,就会出现错误
有什么想法吗?经过更多的研究,我意识到我想要做的就是通过编程方式按下重启按钮。我发现:
EnvDTE.DTE dte = (EnvDTE.DTE)System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE.10.0");
dte.ExecuteCommand("Debug.Restart");
很好 如果使用
EnvDTE
命名空间中的Process
对象及其Attach
方法,而不是EnvDTE80
命名空间中的Process2
对象及其Attach2
方法,则可能无法调试代码。以下代码段应该可以工作:
foreach (Process2 process in Dte.Debugger.LocalProcesses) {
if (process.ProcessID == processId) {
process.Attach2();
Dte.Debugger.CurrentProcess = process;
}
}
这里可能也有人感兴趣:Visual Studio团队发布了一个Visual Studio扩展,它允许自动将子进程附加到当前调试器:
它可在for Visual Studio 2013及更高版本上使用。您可以使用windows实用程序gflags设置操作系统,以便在VS2012调试器下启动应用程序。gflags可以在微软的免费windows调试SDK中找到。如果不进行调试,只需运行gflags并关闭Visual Studio的自动启动即可加载和调试应用程序。谢谢。现在来看。Visual Studio 2010实时调试器的名称为:vsjitdebugger.exe。因此,您需要让gflags调用vsjitdebugger.exe“yourappname.exe”。这将启动调试器的新实例,但我认为它不会设置任何断点。VisualStudio站点有关于手动设置注册表的说明:(GFlags为您设置注册表,这就是我提到它的原因)。这是否意味着它将启动一个新的VisualStudio实例?我试图从代码中复制基本上按下重启按钮的行为。是的,它会的。我不知道有什么其他方法可以让VisualStudio自动为您重新加载应用程序,并在正在调试的代码退出时重新启动(即,更改首选项,启动新的自身调用,然后退出)。很好,你找到了解决方案,但问题和答案之间只有30分钟?有时,发布问题会让你想起以前没有想到的事情。但是谢谢你的暗示。