正如之前提到的,我将要写VS里关于所有不同的断点功能的使用。第一部分,我们讨论命中计数断点。如果你愿意跟着我一起尝试,这里有代码。http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-10-45-48-92/ManagedBreakpointSamples.zip
一个示例的问题
考虑下面方法,应用于一个基本的移位密码字符串凯撒密码(Caesar cipher),转换密码字符为金额
我们设置一个断点在返回语句上。现在让我们看看运行下面代码会发生什么。
当我们在断点上停下,我们观察shiftArray数组,这时有一个问题。
剩下的整个编码消息不能明显的看出是什么问题,我们可以看到’{’在
第35个位置上,明显是错误的。我们怀疑这个问题是在循环编码中出现,所以我们调查第36个循环体。如果我们刚刚在循环里设置了断点,那么在调至开始之前我们将会停下再继续35次!这就是用到命中计数断点来处理的时候了。
创建一个命中计数断点
创建一个命中计数断点首先要创建一个普通的断点在你想调查的循环里。
然后在断点上点击右键呼出菜单。
然后点击“Hit Count…”呼出一个命中计数对话框。
现在设置下拉框从“break always”到“break when the hit count is equal to” 然后输入36
然后点击“OK”你将看到这个断点圆圈里面有个“+”表示是一个高级断点。
现在当你在调试状态下启动程序,会立即停到修改shiftArray[35]的值的代码上。
然后下一部,我看倒了问题所在,这个字符是移除最后的字母。
但是当我再次下一步,我看倒它跳过了这段应该从字母表里去掉字母的代码。
到现在为止我已经发现我的问题了。这里应该是shiftArray[i]>=123 ,我发现这样做远比我使用普通的断点要快。
跳过一段命中
命中计数断点还可用在你需要在跳过你正在执行的代码处,但是你不是十分准确的清楚跳多远。
考虑下面递归方法计算最大公约数。
作为一个开发者,你可能要debug这个方法为了看中间计算的值。给你两个非常大的数。你知道这个方法可能要运行很长时间。但是你不知道有多久。
这种情况你可以用计数断点来节省你一些时间。
同上,右键点击断点选择“hit count…”呼出hit count 对话框。
这时选择“bread when the hit count is greater than or equal to option” 然后输入10
这样将会让你跳过前10次该调用,让你离你想到的地方更近。现在调用这个方法用下面俩个数。
运行到断点处,停在较小的数x和y上,我可以跟它剩下的计算了。
然后如果我继续运行,这个应用程序将会继续在之后的每次命中停在断点上。
我甚至可以点击reset按钮来避免断点停在另一个10次后。
计算迭代
最后,命中计数断点还可以用来简单的计数断点命中次数。现在我们想计算一下这个求最大公约数方法迭代的次数,同上创建断点选择“break when the hit count is greater than or equal to ”
输入任意大的数字比如99999。
这么大的号码,断点肯定不会停。现在设置另一个断点在计算结束后的某个地方,当你在断点停下时,你可以看到计数断点窗口
(available from the Debug -> Windows menu).
So you know that the program went through the function 14 times.