Sun Studio 12:使用 dbx 调试程序

事件规范修饰符

事件规范修饰符设置处理程序的其他属性,最常见的一种是事件过滤器。修饰符必须位于事件规范的关键字部分之后。修饰符以短划线 (-) 开头。以下是有效的事件规范修饰符。

-if condition

发生事件规范指定的事件时,便会对条件进行求值。仅当条件的求值结果为非零时,处理程序才会出现副作用。

如果 -if 修饰符用于具有关联的单一源位置(如 inat)的事件,则在与该位置对应的作用域对 condition 进行求值。否则,请使用所需作用域来限定它。

-resumeone

-resumeone 修饰符可以与 -if 修饰符一起用于多线程程序的事件规范中,这样,条件中包含函数调用时,只恢复一个线程。有关更多信息,请参见将过滤器与条件事件配合使用

-in function

该事件只会发生在到达给定 function 的第一个指令与该函数返回之间。函数的递归会被忽略。

-disable

-disable 修饰符用于创建处于禁用状态的处理程序。

-count n -count infinity

-count n-count infinity 修饰符用于使处理程序从 0 开始计数(请参见使用事件计数器)。每次发生事件时,计数便会增加,直至达到 n。达到 n 后,处理程序便会启动,且计数器重置为零。

程序运行或重新运行时,所有启用的处理程序的计数都会被重置。更确切地讲,就是在发生 sync 事件时重置计数。

在使用 debug -r 命令(请参见debug 命令)或 attach -r 命令(请参见attach 命令)开始调试新程序时会重置计数。

-temp

创建临时处理程序。发生事件后,会立即自动将其删除。缺省情况下,处理程序不是临时性的。如果处理程序是计数处理程序,则只有在计数达到 0(零)时,才会自动将其删除。

可使用 delete -temp 命令删除所有临时处理程序。

-instr

使处理程序在指令级操作。此事件取代了大多数命令的传统后缀 "i"。它通常修改事件处理程序的下列两个方面:

-thread thread_id

只有导致发生事件的线程与 thread_id 相符时,才会执行该操作。对于您考虑的特定线程,在程序的不同次执行中可能分配不同的 thread_id

-lwp lwp_id

只有在导致事件的线程与 lwp_id 相符时,才会执行该操作。只有在导致事件的线程与 lwp_id 相符时,才会执行该操作。对于您考虑的特定线程,在程序的不同次执行中可能分配不同的 lwp_id

-hidden

在常规 status 命令中隐藏处理程序。可使用 status -h 查看隐藏的处理程序。

-perm

正常情况下,装入新程序时,所有处理程序都会被抛弃。使用 -perm 修饰符可在多个调试会话中保留处理程序。不带参数的 delete 命令不会删除永久性处理程序。可使用 delete -p 删除永久性处理程序。