目录
在程序调试的实践中,我们经常会遇到一些复杂的场景,其中典型的包括:
-
特定循环次数的打断点:比如,你希望在一个循环执行到第N次时暂停代码,以便于检查程序状态或进行进一步的调试。如果使用传统的手动打断点方式,你可能需要不断地点击“单步执行”,直到循环达到所需的次数。这种方法不仅效率低下,而且容易出错。
-
变量变更检测:另一个常见的需求是跟踪一个变量何时以及如何被更改。在复杂的程序中,一个变量可能在多个地方被赋值,手动设置断点并检查每个可能的修改点是非常耗时且困难的。
为了应对这些挑战,现代的开发环境和调试工具提供了更为高级的断点功能,具体如下:
-
条件断点:这种类型的断点允许你设置一个条件表达式,只有当该表达式求值为真时,断点才会触发。例如,你可以设置一个条件断点,当循环计数器达到特定值时触发。
-
数据断点:某些调试工具支持数据断点,允许你指定当某个内存地址(对应于特定变量)的内容发生变化时自动暂停执行。这样,你就可以精确地定位到变量值改变的地方。
使用这些高级断点功能,你可以更加智能和高效地进行程序调试,避免了大量不必要的手工操作,快速定位问题所在。
1.依靠断点处执行次数触发断点
让我们随手打个断点。
选择BreakPoints
我们双击Current BreakPoints框中的的断点,Expression将会出现断点信息
这里简单说明一下
Expression是用于设置断点条件的表达式。例如,我们可以在代码的特定行设置断点,以便在执行到该行时暂停程序的运行。此外,我们还可以使用基本的比较操作符(如>、<、==、!=等)来设置更复杂的断点条件。
Count表示断点的触发次数,即程序运行多少次后触发一次断点。在这个例子中,我们设置的断点触发次数为5,表示每次运行5次断点位置时就会触发断点。
Command表示当达到断点时要执行的命令。在这个例子中,我们没有设置任何命令,所以默认为空。如果需要,可以在这里添加自定义命令,以便在达到断点时执行特定的操作。
然后点击define,如果出现这个,不用管,选择是就行,然后选择close;
然后我们运行,可以看到运行5次后,程序在断点处停了下来。
2.依靠变量的读取或者写入次数触发中断
我们找个变量,将变量添加到watch窗口。
右击该变量,选择Set Access Breakpoint at
我们选择在Acess中选择读取或者写入,count写读入或者写入的次数
比如我们写5,那么在I被写入5次时,将触发断点
3.当变量等于某个值时触发断点
我们找个变量,将变量添加到watch窗口。右击该变量,选择Set Access Breakpoint at
删除Expression中的内容,写入咱的判断条件,在Acess中选择Read或者Write,点击Define,运行程序
可以看到,程序将会在i==10的语句停下
4.打印信息
意思是当程序运行到这里时,就不触发断点了,而是打印个信息
5.条件+打印
意思是程序满足了条件,程序就不中断了,会打印一下信息