Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在VS2010调试器中重新启动程序_C#_Visual Studio 2010_Debugging_Process - Fatal编程技术网

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分钟?有时,发布问题会让你想起以前没有想到的事情。但是谢谢你的暗示。