VS 2010调试器中的重新启动程序

时间:2015-06-09 20:54:47

标签: c# visual-studio-2010 debugging process

我有一个应用程序偶尔会要求您在更改首选项后重新启动它。我通过致电:

来做到这一点
System.Diagnostics.Process.Start(Application.ResourceAssembly.Location);

这对于发布的版本来说非常棒,但是当我调试时它真的很烦人,并且每当我需要更改首选项时它会在调试器外重新启动程序。

经过一些研究,我尝试从代码中附加到调试器,但我正在尝试运行的代码已经在调试器中运行,应用程序将很快被杀死。所以我编写了一个外部程序,可以在重新启动应用程序(并释放调试器)之后调用,该程序应该将它附加到调试器上。不幸的是,这并没有真正完成这项工作。它似乎附加到调试器,但它实际上并没有让我做任何调试。如果我尝试暂停执行,它只会出错。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

经过更多的研究,我意识到我想要做的就是以编程方式点击“重启”按钮。我发现了这个:

EnvDTE.DTE dte = (EnvDTE.DTE)System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE.10.0");
dte.ExecuteCommand("Debug.Restart");

效果很好!

答案 1 :(得分:0)

如果您使用Process对象及Attach命名空间中的EnvDTE方法而不是Process2对象,则可能无法使用代码进行调试来自Attach2命名空间的EnvDTE80方法。以下代码段应该有效:

foreach (Process2 process in Dte.Debugger.LocalProcesses) {
   if (process.ProcessID == processId) {
       process.Attach2();
       Dte.Debugger.CurrentProcess = process;
   }
}

这里也可能有兴趣:Visual Studio团队发布了一个Visual Studio扩展,允许自动将子进程附加到当前调试器:Introducing the Child Process Debugging Power Tool

Visual Studio 2013及更高版本的Gallery可以使用它。