Debugger.Launch不工作

时间:2012-09-29 19:53:38

标签: c# visual-studio debugging .net-4.0

我目前正在尝试为外部启动的进程启动调试器(而不是从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 个答案:

答案 0 :(得分:12)

我在Visual Studio 2013 Premium中遇到同样的问题。 Eric回答了我如何解决它。但是你不需要改变寄存器。

  1. 转到工具 - >选项 - >调试
  2. 打开项目并选择及时调试程序
  3. 如果你在窗口的下半部分看到一个黄色 关于正在使用与视觉不同的其他调试的警告 工作室。如果您看到,请选中所有“及时”复选框以返回 到VS作为调试程序。
  4. 就是这样。!

    Options Just in Time debugger

答案 1 :(得分:4)

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

即使this文章问题已在VS2013中解决,即使您像我一样使用VS2013,也请查找其中列出的临时修订选项卡。我用它修复了这个问题。链接中的更多信息。

我只是链接another article,这使我朝着正确的方向前进,也许它也很有用。

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

答案 2 :(得分:4)

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

答案 3 :(得分:0)

答案: Visual Studio 2010 Express

Express不支持(没有hackery级别)附加到进程来调试它。这意味着即时调试功能可用。我认为这也是导致Debugger.Launch失败的原因(尽管它返回true,我假设这是因为它在技术上试图显示一个对话框,但没有安装调试器)。