23

我目前正在尝试为外部启动的进程(而不是从 Visual Studio 内部)启动调试器。我似乎无法真正启动调试器,因为它似乎没有任何反应。在此过程中,我添加了以下代码:

Debug.Assert(Debugger.IsAttached == false, "Should be no debugger");
if (!Debugger.IsAttached)
{
    Debug.Assert(Debugger.Launch(), "Debugger not launched");
}
Debugger.Break();
Debug.Assert(Debugger.IsAttached == true, "Debugger should be attached");

这些断言是为了验证我没有疯。起初,IsAttached属性返回 false,正如我所料。然后我调用Debugger.Launch,它返回true。根据Debugger.Launch的 MSDN 文档,它表示只有在成功启动调试器或已附加调试器时才会返回 true。我验证了一个没有附加,所以它一定已经启动了一个。

断点永远不会被击中,并且第二次验证失败(IsAttached属性返回 false)。我还尝试在Debugger.Launch之后休眠以给它一些时间,但无济于事。

有什么建议么?

4

3 回答 3

25

我在 Visual Studio 2013 Premium 中遇到了同样的问题。Eric回答让我想到了如何解决它。但是您不需要更改注册表。

  1. 转到工具 --> 选项 --> 调试
  2. 打开项目并选择即时调试器
  3. 如果您在窗口的下半部分看到一个黄色警告,说明正在使用不同于 Visual Studio 的其他调试。如果您看到,请选中所有 Just in Time 复选框以返回 VS 作为调试程序。

就这些!

选项即时调试器

于 2014-10-06T17:42:32.147 回答
5

这是一个蹩脚的答案,因为我在问题中找不到任何对 VS Express 的引用,而且在使用 VS2013 Pro 时我也遇到了同样的问题。

尽管这篇文章说这个问题在 VS2013 中得到了解决,即使你像我一样使用 VS2013,也要寻找那里列出的临时修复选项卡。我用它解决了这个问题。链接中的更多信息。

我将链接另一篇文章,让我朝着正确的方向前进,也许它也很有用。

摘要:将 Visual Studio Just-In-Time Debugger 注册表项的 AppIDFlags 值从 0x28 更改为 0x8(或根据上面的文章,尝试和错误我猜是 0x20)他们的注册表项是 HKEY_CLASSES_ROOT\AppID\{E62A7A31-6025- 408E-87F6-81AEB0DC9347}

于 2013-12-09T04:31:01.350 回答
5

也许这将有助于将来的某人。我有同样的问题,Debugger.Launch 似乎没有做任何事情。结果是其他人登录了我的机器,并且调试器附加提示在他们的环境中启动,而不是我的。我将他们踢出系统并修复了它。

于 2015-07-15T23:16:56.757 回答