System.Diagnostics.Debugger.Debug()停止工作

我正在开发一个使用System.Diagnostics.Debugger.Break()方法的程序,允许用户从命令行设置断点。 这已经好几个星期了。 但是,当我今天正在修复unit testing时,我试图从命令行使用调试开关,但它不起作用。

这是我尝试过的:

  • 我已经确认调用了Debug()方法(通过在其后面放置一个System.Console.WriteLine())
  • 我已经确认构建仍在Debug中
  • 我做了一个干净的构建
  • 我重新启动了Product Studio

快速谷歌搜索没有透露任何内容,.Net的API文档没有提及任何关于此function无法正常执行的内容。 所以…任何想法?

我终于弄清楚发生了什么。 出于某种原因,我的机器上发生了一些变化,因此只是调用Debugger.Debug已经不够了(仍然不明白改变了什么)。 在任何情况下,我现在都可以使用以下命令调试器:

if (Debugger.IsAttached == false) Debugger.Launch(); 

我正在使用debugger.launch()方法,它突然停止工作。 运用

 if (Debugger.IsAttached == false) Debugger.Launch(); 

也没有调出调试器。 我尝试重置我的视觉工作室设置,它工作了!

从这里提取( MSDN )以下注释:

从net_v40_long开始,运行时不再严格控制启动M:System.Diagnostics.Debugger.Break方法的调试器,而是向Windows错误报告(WER)子系统报告错误。 WER提供了许多设置来自定义问题报告体验,因此很多因素都会影响WER响应错误的方式,例如操作系统版本,进程,会话,用户,计算机和域。 如果在调用M:System.Diagnostics.Debugger.Break方法时遇到意外结果,请检查计算机上的WER设置。 有关如何自定义WER的详细信息,请参阅WER Settingshttps://msdn.microsoft.com/library/windows/desktop/bb513638.aspx。 如果要确保无论WER设置如何启动调试器,请务必调用M:System.Diagnostics.Debugger.Launch方法。

我认为它解释了检测到的行为。

你在使用VS 2008 SP1吗? 我在该版本的调试中遇到了很多问题,所有这些都是通过这个Microsoft补丁解决的。

放置在循环或递归函数中的断点在每次迭代的所有进程中都不会被命中。 通常,在进程停止之前,某些进程可能会经历循环的多次迭代,忽略断点。

命中断点,但在Visual Studio调试器中调试多个进程时,它们不可见。

还修复了一些与调试器相关的其他问题。