我目前正在尝试为外部启动的进程启动调试器(而不是从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 之后暂停一下,给它一些时间,但没有用。
有什么建议吗?
答案 0 :(得分:12)
我在Visual Studio 2013 Premium中遇到同样的问题。 Eric回答了我如何解决它。但是你不需要改变寄存器。
就是这样。!
答案 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,我假设这是因为它在技术上试图显示一个对话框,但没有安装调试器)。