【问题标题】:Why does the condition for a breakpoint failed to execute?为什么断点的条件无法执行?
【发布时间】:2014-03-28 09:46:46
【问题描述】:

我想在短时间内暂时禁用断点,所以我设置了一个条件断点,条件如下:

(global::System.DateTime.Now<new global::System.DateTime(2014,03,28,11,0,0))

当这个断点被命中时,会弹出一个对话框,说

The condition for a breakpoint failed to execute. The condition was 
'(global::System.DateTime.Now<new
global::System.DateTime(2014,03,28,11,0,0))'. The error returned was
'The runtime has refused to evaluate the expression at this time.'. Click
OK to stop at this breakpoint.

为什么运行时拒绝计算表达式?

如何在不修改已调试源代码的情况下获得所需的行为?

【问题讨论】:

标签: c# debugging visual-studio-2013 conditional-breakpoint


【解决方案1】:

从 VS2012 开始,您必须切换到托管兼容模式才能使用条件断点。为什么(抱歉,由于该链接已损坏,MS 不再提供原因。我添加了指向 archive.org 的链接)以及此处描述的方式:

switching-to-managed-compatibility-mode-in-visual-studio-2013

old Microsoft link, now dead

the original Microsoft article on archive.org

【讨论】:

  • 奇怪的是,他们甚至没有将条件断点作为切换到旧模式的原因之一!
  • 可以,切换到兼容模式后就可以了。
  • 死链接,this seems to work.
  • 我从archive.org添加了损坏的文章
【解决方案2】:

据我所知,这是不可能的。你可以做的是使用HitCount

或在C# 代码中使用计时器(如您所愿)进行硬编码

#if DEBUG 
  if(System.Diagnostics.Debugger.IsAttached)
     System.Diagnostics.Debugger.Break();
#endif

【讨论】:

  • 硬编码不是一种选择,因为您无法在调试会话期间更改行为,命中计数需要预先统计数据才能具有任何及时意义
  • @mbx:你在说什么行为?
  • 断点的行为 - 可以在调试会话期间在运行时更改条件 - 只需中断,更改断点的条件并继续
  • @mbx: HitCount 是最好的,你可以基本上 afaik,对于这种情况。
猜你喜欢
  • 1970-01-01
  • 2021-10-12
  • 1970-01-01
  • 2017-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-17
相关资源
最近更新 更多