Oracle® Developer Studio 12.5:使用 dbx 调试程序

退出打印视图

更新时间: 2016 年 6 月
 
 

事件规范修饰符

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

-if 修饰符

-if 修饰符的语法为:

-if condition

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

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

根据与 print 命令相同的约定对条件执行宏扩展。

-resumeone 修饰符

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

-in 修饰符

-in 修饰符的语法为:

-in function

仅当事件在达到给定函数的第一个指令之后、函数返回之前的这段时间发生时,才会触发事件。函数的递归会被忽略。

-disable 修饰符

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

-count n-count infinity 修饰符

-count 修饰符的语法为:

-count n

-count infinity

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

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

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

-temp 修饰符

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

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

-instr 修饰符

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

  • 任何消息均输出汇编级信息,而非源代码级信息。

  • 事件的粒度变为指令级。例如,step –instr 意味着指令级单步执行。

-thread 修饰符

-thread 修饰符的语法为:

-thread thread-ID

-thread 修饰符意味着只有在导致事件的线程与另一个线程 ID 相符时,才会执行该操作。对于您考虑的特定线程,在程序的不同次执行中可能分配不同的线程 ID。

-lwp 修饰符

-lwp 修饰符的语法为:

-lwp lwp-ID

-lwp 修饰符意味着只有在导致事件的 -lwplwp-ID 相符时,才会执行该操作。对于您考虑的特定 -lwp,在程序的不同次执行中可能分配有不同的 lwp-ID

-hidden 修饰符

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

-perm 修饰符

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