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

时间:2010-03-19 03:03:53

标签: c# debugging

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

这是我尝试过的:

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

快速Google搜索没有透露任何内容,.Net的API文档没有提及有关此功能无法正常执行的任何信息。所以...任何想法?

4 个答案:

答案 0 :(得分:20)

我终于弄清楚发生了什么。出于某种原因,我的机器上发生了一些变化,因此仅仅调用Debugger.Debug已经不够了(仍然不明白改变了什么)。无论如何,我现在可以通过使用:

使调试器出现
if (Debugger.IsAttached == false) Debugger.Launch();

答案 1 :(得分:2)

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

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

也没有启动调试器。我尝试重置我的视觉工作室设置,它工作正常!

答案 2 :(得分:1)

从这里提取(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方法。

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

答案 3 :(得分:0)

您使用的是VS 2008 SP1吗?我在该版本的调试过程中遇到了很多问题,所有问题都由Microsoft patch解决了。

  

断点放入循环或中   递归函数根本没有被击中   每次迭代的过程。   通常,某些过程可能会通过   通过循环的多次迭代,   在a之前忽略断点   过程停止了。

     

断点被击中,但它们不是   调试多个时可见   Visual Studio中的进程   调试器。

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