我使用的方法被称为数万次,最近开始抛出异常.在大多数调试环境中,我会在此方法的顶部设置一个断点并运行直到我通过触发异常的参数值到达我感兴趣的调用.在这种情况下,这是不切实际的,所以我尝试设置一个断点,其条件只有在出现该参数值时才会中断.我在下面指出的位置创建了一个断点并给它一个条件str == "OffendingValue"
.
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 debugging命令通常会破坏当前正在执行的语句上的程序执行是否为断点,当我启用了这个有问题的断点时,它根本不执行任何操作.
有没有人遇到与Visual Studio断点条件类似的行为?我可以毫无问题地使用命中计数条件.
每当我尝试在Visual Studio中使用条件断点时,我都遇到了同样的问题.调试器运行得如此之慢,以至于变得无用.相反,我最终临时在代码中添加了一个if语句,并在其中添加了断点.这不方便,但代码以正常速度执行,它确实完成了工作.
class Foo { // Bar() is called many, many times void Bar(string str) { try { if(str == "condition") { int i = 0; // Breakpoint inserted here } ... } catch (Exception ex) { ... } } }