Debugger.Launch不工作

我目前正在尝试为外部启动的进程启动调试器(而不是从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。 我确认一个没有附加,所以它必须启动一个。

断点永远不会被击中,第二次validation失败( IsAttached属性返回false)。 我也尝试在Debugger.Launch之后暂停一下,给它一些时间,但无济于事。

有什么建议?

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

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

就这些。!

选项Just in Time调试器

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

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

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

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

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

答案: Visual Studio 2010 Express

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

  • PreApplicationStartMethod实际上何时被触发运行?
  • 有没有办法将进程的当前WorkingSet扩展到1GB?
  • 在.NET 4.0应用程序域上加载针对.NET 4.5的程序集
  • 如何抑制由我​​无法更改的代码显示的对话框?
  • 如何使用可读/可写的本地XML设置?
  • 如果用户没有安装.NET,我该如何部署C#应用程序?
  • 如何使用任务有条不紊地运行代码
  • 当enum无法序列化时,提前失败或明显抛出
  • Singleton中的结构图返回多个实例
  • 将事件设置为空
  • C#4.0中的障碍和C#3.0中的WaitHandle之间的区别?