在 dbx 中,大多数事件管理命令都支持可选的事件过滤器修饰符。最简单的过滤器是指示 dbx 在程序执行到断点或跟踪处理程序处后或出现数据更改断点后测试条件。
如果相应过滤器条件的求值结果为 true(非 0),则会应用事件命令,且程序在断点处停止执行。如果条件的求值结果为 false (0),dbx 会继续执行程序,就好像从未发生过事件。
要设置包含过滤器的断点,请将可选的 - if condition 修饰符语句添加到 stop 或 trace 命令的末尾。
条件可以是任何有效的表达式(包括函数调用),其返回值是布尔值或输入命令时所用语言表示的整数值。
对于像 in 或 at 这样基于位置的断点,用来解析条件的作用域便是断点位置的作用域。否则,条件的作用域是输入时的作用域,而不是事件发生时的作用域。可能必须使用反引号操作符(请参见反引号操作符)来精确指定作用域。
以下两个过滤器是不一样的:
stop in foo -if a>5 stop cond a>5
前者在 foo 处中断并测试条件。后者自动单步执行并测试条件。