Skip Navigation Links | |
Exit Print View | |
Oracle Solaris 11.1 Dynamic Tracing Guide Oracle Solaris 11.1 Information Library |
Speculation Options and Tuning
13. Statically Defined Tracing for User Applications
To use a speculation, an identifier returned from speculation must be passed to the speculate function in a clause before any data-recording actions. All subsequent data-recording actions in a clause containing a speculate will be speculatively traced. The D compiler will generate a compile-time error if a call to speculate follows data recording actions in a D probe clause. Therefore, clauses may contain speculative tracing or non-speculative tracing requests, but not both.
Aggregating actions, destructive actions, and the exit action may never be speculative. Any attempt to take one of these actions in a clause containing a speculate results in a compile-time error. A speculate may not follow a speculate: only one speculation is permitted per clause. A clause that contains only a speculate will speculatively trace the default action, which is defined to trace only the enabled probe ID. See Chapter 4, Actions and Subroutines for a description of the default action.
Typically, you assign the result of speculation to a thread-local variable and then use that variable as a subsequent predicate to other probes as well as an argument to speculate. For example:
syscall::openat:entry { self->spec = speculation(); } syscall::: /self->spec/ { speculate(self->spec); printf("this is speculative"); }