我使用的方法称为最近几万次开始抛出异常。在大多数调试环境中,我会在此方法的顶部设置一个断点,然后继续运行,直到遇到我感兴趣的调用触发异常的参数值。在这种情况下这将是不切实际的,所以我试图设置一个断点,只有当该参数值出现时才会断开。我在下面的位置创建了一个断点,并给它一个条件str == "OffendingValue"
。Visual Studio在使用断点条件进行调试时行为异常
class Foo
{
// Bar() is called many, many times
void Bar(string str)
{
try
{
// Breakpoint inserted here
...
}
catch (Exception ex)
{
...
}
}
}
令我惊讶的是,这样做导致Visual Studio和我的应用程序在调试模式下停止工作。我的应用程序启动并输出一些简单的日志消息,但后来完全停止响应由于需要做更多的工作来监控断点状况,因此思考Visual Studio可能会稍微慢一点,我离开办公桌15分钟让它有一段时间运行。当我回来时,没有任何变化。我可以通过删除断点并以相同的条件重新创建条件来重现条件。最奇怪的是,当我有这个有问题的断点时,Break All调试命令(通常会破坏当前正在执行它是否是断点的语句上的程序执行)不会执行任何操作。
有没有人遇到与Visual Studio断点条件类似的行为?我能够毫无问题地使用命中计数条件。
这种方法在长时间的操作系列中取代了调用堆栈。我虽然没有单独为这种方法编写单元测试,但也许这是一个好方法。一个工作条件断点将是最简单的方法,这就是为什么我很好奇VS为什么不工作。 – Chris 2008-11-13 22:08:58
我也发现一些VS的调试功能遇到问题时,他们被击中太多次。我认为VS只是落后于评估。因此,解决方法;) – 2008-11-14 14:31:07