事件规范修饰符设置处理程序的其他属性,最常见的一种是事件过滤器。修饰符必须位于事件规范的关键字部分之后。修饰符以短划线 (-) 开头。以下是有效的事件规范修饰符。
发生事件规范指定的事件时,便会对条件进行求值。仅当条件的求值结果为非零时,处理程序才会出现副作用。
如果 -if 修饰符用于具有关联的单一源位置(如 in 或 at)的事件,则在与该位置对应的作用域对 condition 进行求值。否则,请使用所需作用域来限定它。
-resumeone 修饰符可以与 -if 修饰符一起用于多线程程序的事件规范中,这样,条件中包含函数调用时,只恢复一个线程。有关更多信息,请参见将过滤器与条件事件配合使用。
该事件只会发生在到达给定 function 的第一个指令与该函数返回之间。函数的递归会被忽略。
-count n 和 -count infinity 修饰符用于使处理程序从 0 开始计数(请参见使用事件计数器)。每次发生事件时,计数便会增加,直至达到 n。达到 n 后,处理程序便会启动,且计数器重置为零。
程序运行或重新运行时,所有启用的处理程序的计数都会被重置。更确切地讲,就是在发生 sync 事件时重置计数。
在使用 debug -r 命令(请参见debug 命令)或 attach -r 命令(请参见attach 命令)开始调试新程序时会重置计数。
创建临时处理程序。发生事件后,会立即自动将其删除。缺省情况下,处理程序不是临时性的。如果处理程序是计数处理程序,则只有在计数达到 0(零)时,才会自动将其删除。
可使用 delete -temp 命令删除所有临时处理程序。
使处理程序在指令级操作。此事件取代了大多数命令的传统后缀 "i"。它通常修改事件处理程序的下列两个方面:
任何消息均输出汇编级信息,而非源码级信息。
事件的粒度变为指令级。例如,step -instr 意味着指令级单步执行。
只有导致发生事件的线程与 thread_id 相符时,才会执行该操作。对于您考虑的特定线程,在程序的不同次执行中可能分配不同的 thread_id。
只有在导致事件的线程与 lwp_id 相符时,才会执行该操作。只有在导致事件的线程与 lwp_id 相符时,才会执行该操作。对于您考虑的特定线程,在程序的不同次执行中可能分配不同的 lwp_id。
在常规 status 命令中隐藏处理程序。可使用 status -h 查看隐藏的处理程序。
正常情况下,装入新程序时,所有处理程序都会被抛弃。使用 -perm 修饰符可在多个调试会话中保留处理程序。不带参数的 delete 命令不会删除永久性处理程序。可使用 delete -p 删除永久性处理程序。