Red Hat ENTERPRISE LINUX 5.4 - SYSTEMTAP LANGUAGE Reference Manual

Systemtap language reference
Hide thumbs Also See for ENTERPRISE LINUX 5.4 - SYSTEMTAP LANGUAGE:
Table of Contents

Advertisement

Red Hat Enterprise
Linux 5.4
SystemTap
Language Reference
A guide to the constructs and syntax used in SystemTap scripts
Robb Romans

Advertisement

Table of Contents
loading
Need help?

Need help?

Do you have a question about the ENTERPRISE LINUX 5.4 - SYSTEMTAP LANGUAGE and is the answer not in the manual?

Questions and answers

Subscribe to Our Youtube Channel

Summary of Contents for Red Hat ENTERPRISE LINUX 5.4 - SYSTEMTAP LANGUAGE

  • Page 1 Red Hat Enterprise Linux 5.4 SystemTap Language Reference A guide to the constructs and syntax used in SystemTap scripts Robb Romans...
  • Page 2 SystemTap Language Reference Red Hat Enterprise Linux 5.4 SystemTap Language Reference A guide to the constructs and syntax used in SystemTap scripts Edition 1 Author Robb Romans robb@linux.vnet.ibm.com Copyright © 2009 Red Hat Inc., Copyright © 2009 IBM Corp., Copyright © 2009 Intel Corporation. This document was derived from other documents contributed to the SystemTap project by employees of Red Hat, IBM and Intel.
  • Page 3: Table Of Contents

    1. SystemTap overview 1.1. About this guide ......................1 1.2. Reasons to use SystemTap ..................1 1.3. Event-action language ....................1 1.4. Sample SystemTap scripts ................... 1 1.4.1. Basic SystemTap syntax and control structures ........... 1 1.4.2. Primes between 0 and 49 .................. 2 1.4.3.
  • Page 4 SystemTap Language Reference 5.2.2. Integers ......................23 5.2.3. Strings ......................23 5.2.4. Associative arrays .................... 23 5.2.5. Statistics ......................23 5.3. Semicolons ........................ 23 5.4. Comments ......................... 23 5.5. Whitespace ........................ 24 5.6. Expressions ....................... 24 5.6.1. Binary numeric operators ................. 24 5.6.2.
  • Page 5 8.3. Integer extractors ....................... 35 8.3.1. @count(s) ....................... 35 8.3.2. @sum(s) ......................35 8.3.3. @min(s) ......................35 8.3.4. @max(s) ......................35 8.3.5. @avg(s) ......................35 8.4. Histogram extractors ....................36 8.4.1. @hist_linear ....................36 8.4.2. @hist_log ......................37 9. Predefined functions 9.1.
  • Page 6 SystemTap Language Reference 9.3.6. task_gid ......................49 9.3.7. task_nice ......................50 9.3.8. task_parent ..................... 50 9.3.9. task_pid ......................50 9.3.10. task_prio ....................... 50 9.3.11. task_state ...................... 50 9.3.12. task_tid ......................51 9.3.13. task_uid ......................51 9.3.14. task_open_file_handles .................. 51 9.3.15. task_max_file_handles ................... 51 9.4.
  • Page 7 9.10.3. gettimeofday_ns ..................... 61 9.10.4. gettimeofday_s ....................61 9.10.5. gettimeofday_us ..................... 61 9.11. Miscellaneous tapset functions .................. 61 9.11.1. addr_to_node ....................62 9.11.2. exit ........................ 62 9.11.3. system ......................62 10. For Further Reference Index...
  • Page 8 viii...
  • Page 9: Systemtap Overview

    Chapter 1. SystemTap overview 1.1. About this guide This guide is a comprehensive reference of SystemTap's language constructs and syntax. The contents borrow heavily from existing SystemTap documentation found in manual pages and the tutorial. The presentation of information here provides the reader with a single place to find language syntax and recommended usage.
  • Page 10: Primes Between 0 And 49

    Chapter 1. SystemTap overview probe begin { # "no" and "ne" are local integers for (i = 0; i < 10; i++) { if (i % 2) odds [no++] = i else evens [ne++] = i delete odds[2] delete evens[3] exit() probe end { foreach (x+ in odds)
  • Page 11: Recursive Functions

    Recursive functions This prints: 1.4.3. Recursive functions function fibonacci(i) { if (i < 1) error ("bad number") if (i == 1) return 1 if (i == 2) return 2 return fibonacci (i-1) + fibonacci (i-2) probe begin { printf ("11th fibonacci number: %d", fibonacci (11)) exit () This prints: 11th fibonacci number: 118...
  • Page 12: Safety And Security

    Chapter 1. SystemTap overview resulting kernel module into a running Linux kernel to perform the requested system trace or probe functions. You can supply the script in a named file, from standard input, or from the command line. The program runs until it is interrupted by the user or a sufficient number of soft errors, or if the script voluntarily invokes the exit() function.
  • Page 13 Safety and security If something goes wrong with stap or staprun after a probe has started running, you may safely kill both user processes, and remove the active probe kernel module with the rmmod command. Any pending trace messages may be lost.
  • Page 15: Types Of Systemtap Scripts

    Chapter 2. Types of SystemTap scripts 2.1. Probe scripts Probe scripts are analogous to programs; these scripts identify probe points and associated handlers. 2.2. Tapset scripts Tapset scripts are libraries of probe aliases and auxiliary functions. The /usr/share/systemtap/tapset directory contains tapset scripts. While these scripts look like regular SystemTap scripts, they cannot be run directly.
  • Page 17: Components Of A Systemtap Script

    Chapter 3. Components of a SystemTap script The main construct in the scripting language identifies probes. Probes associate abstract events with a statement block, or probe handler, that is to be executed when any of those events occur. The following example shows how to trace entry and exit from a function using two probes. probe kernel.function("sys_mkdir") { log ("enter") } probe kernel.function("sys_mkdir").return { log ("exit") } To list the probe-able functions in the kernel, use the last-pass option to the translator.
  • Page 18: Prologue-Style Aliases (=)

    Chapter 3. Components of a SystemTap script probe socket.sendmsg = kernel.function ("sock_sendmsg") { ... } probe socket.do_write = kernel.function ("do_sock_write") { ... } probe socket.send = socket.sendmsg, socket.do_write { ... } There are two types of aliases, the prologue style and the epilogue style which are identified by the equal sign (=) and "+="...
  • Page 19: Probe Alias Usage

    Probe alias usage probe syscall.read += kernel.function("sys_read") { if (traceme) println ("tracing me") 3.2.3. Probe alias usage A probe alias is used the same way as any built-in probe type, by naming it: probe syscall.read { printf("reading fd=%d\n", fildes) 3.2.4. Unused alias variables An unused alias variable is a variable defined in a probe alias, usually as one of a group of var = $var assignments, which is not actually used by the script probe that instantiates the alias.
  • Page 20: Embedded C

    Chapter 3. Components of a SystemTap script function <name>[:<type>] ( <arg1>[:<type>], ... ) { <stmts> } SystemTap scripts may define subroutines to factor out common work. Functions may take any number of scalar arguments, and must return a single scalar value. Scalars in this context are Section 3.3, “Variables”...
  • Page 21 Embedded C functions that could potentially be invalid or dangerous. If you are unsure, err on the side of caution and use kread(). The kread() macro is one of the safety mechanisms used in code generated by embedded C. It protects against pointer accesses that could crash the system. For example, to access the pointer chain name = skb->dev->name in embedded C, use the following code.
  • Page 23: Probe Points

    Chapter 4. Probe points 4.1. General syntax The general probe point syntax is a dotted-symbol sequence. This divides the event namespace into parts, analogous to the style of the Domain Name System. Each component identifier is parameterized by a string or number literal, with a syntax analogous to a function call. The following are all syntactically valid probe points.
  • Page 24: Built-In Probe Point Types (Dwarf Probes)

    Chapter 4. Probe points The following is the general syntax. kernel.function("no_such_function") ? 4.2. Built-in probe point types (DWARF probes) This family of probe points uses symbolic debugging information for the target kernel or module, as may be found in executables that have not been stripped, or in the separate debuginfo packages. They allow logical placement of probes into the execution path of the target by specifying a set of points in the source or object code.
  • Page 25: Kernel.function, Module().Function

    kernel.function, module().function In the above probe descriptions, MPATTERN stands for a string literal that identifies the loaded kernel module of interest and LPATTERN stands for a source program label. Both MPATTERN and LPATTERN may include asterisk (*), square brackets "[]", and question mark (?) wildcards. PATTERN stands for a string literal that identifies a point in the program.
  • Page 26: Kernel.statement, Module().Statement

    Chapter 4. Probe points kernel.function("func[@file]" module("modname").function("func[@file]" Examples: # Refers to all kernel functions with "init" or "exit" # in the name: kernel.function("*init*"), kernel.function("*exit*") # Refers to any functions within the "kernel/sched.c" # file that span line 240: kernel.function("*@kernel/sched.c:240") # Refers to all functions in the ext3 module: module("ext3").function("*") 4.2.2.
  • Page 27: Marker Probes

    Marker probes count) You can obtain the values of fd, buf, and count, respectively, as uint_arg(1), pointer_arg(2), and ulong_arg(3). In this case, your probe code must first call asmlinkage(), because on some architectures the asmlinkage attribute affects how the function's arguments are passed.
  • Page 28: Return Probes

    Chapter 4. Probe points timer.jiffies(N) timer.jiffies(N).randomize(M) The probe handler runs every N jiffies. If the randomize component is given, a linearly distributed random value in the range [-M … +M] is added to N every time the handler executes. N is restricted to a reasonable range (1 to approximately 1,000,000), and M is restricted to be less than N.
  • Page 29: Special Probe Points

    Special probe points the context of the return probe, though their values may have been changed by the function. Inline functions do not have an identifiable return point, so .return is not supported on .inline probes. 4.7. Special probe points The probe points begin and end are defined by the translator to refer to the time of session startup and shutdown.
  • Page 30: Counter

    Chapter 4. Probe points implementation, except for generic cycle and instructions events, which are available on all processors. The probe perfmon.counter(event) starts a counter on the processor which counts the number of events that occur on that processor. For more details about the performance monitoring events available on a specific processor, see the help text returned by typing the perfmon2 command pfmon -l.
  • Page 31: Language Elements

    Chapter 5. Language elements 5.1. Identifiers Identifiers are used to name variables and functions. They are an alphanumeric sequence that may include the underscore (_) and dollar sign ($) characters. They have the same syntax as C identifiers, except that the dollar sign is also a legal character. Identifiers that begin with a dollar sign are interpreted as references to variables in the target software, rather than to SystemTap script variables.
  • Page 32: Whitespace

    Chapter 5. Language elements # ... shell style, to the end of line // ... C++ style, to the end of line /* ... C style ... */ 5.5. Whitespace As in C, spaces, tabs, returns, newlines, and comments are treated as whitespace. Whitespace is ignored by the parser.
  • Page 33: Function Call

    Function call 5.6.9. Function call General syntax: fn ([ arg1, arg2, ... ]) 5.6.10. $ptr->member ptr is a kernel pointer available in a probed context. 5.6.11. <value> in <array_name> This expression evaluates to true if the array contains an element with the specified index. 5.6.12.
  • Page 34: Conditional Compilation

    Chapter 5. Language elements 10, mystring 5.8. Conditional compilation 5.8.1. Conditions One of the steps of parsing is a simple conditional preprocessing stage. The general form of this is Section 5.6.7, “Ternary operator”). similar to the ternary operator (Section %( CONDITION %? TRUE-TOKENS %) %( CONDITION %? TRUE-TOKENS %: FALSE-TOKENS %) The CONDITION is a limited expression whose format is determined by its first keyword.
  • Page 35 True and False Tokens The following code adapts to hypothetical kernel version drift. probe kernel.function ( %( kernel_v <= "2.6.12" %? "__mm_do_fault" %: %( kernel_vr == "2.6.13-1.8273FC3smp" %? "do_page_fault" %: UNSUPPORTED %) %)) { /* ... */ } %( arch == "ia64" %? probe syscall.vliw = kernel.function("vliw_widget") {}...
  • Page 37: Statement Types

    Chapter 6. Statement types Statements enable procedural control flow within functions and probe handlers. The total number of statements executed in response to any single probe event is limited to MAXACTION, which defaults Section 1.6, “Safety and security”. to 1000. See Section 6.1.
  • Page 38: Foreach

    Chapter 6. Statement types for (EXP1; EXP2; EXP3) STMT The for statement is similar to the for statement in C. The for expression executes EXP1 as initialization. While EXP2 is non-zero, it executes STMT, then the iteration expression EXP3. 6.6. foreach General syntax: foreach (VAR in ARRAY) STMT The foreach statement loops over each element of a named global array, assigning the current key...
  • Page 39: Return

    return statement1 statement2 The semicolon represents the null statement, or do nothing. It is useful as an optional separator between statements to improve syntax error detection and to handle certain grammar ambiguities. 6.10. return General syntax: return EXP The return statement returns the EXP value from the enclosing function. If the value of the function is not returned, then a return statement is not needed, and the function will have a special unknown type with no return value.
  • Page 41: Associative Arrays

    Chapter 7. Associative arrays Associative arrays are implemented as hash tables with a maximum size set at startup. Associative arrays are too large to be created dynamically for individual probe handler runs, so they must be declared as global. The basic operations for arrays are setting and looking up elements. These operations are expressed in awk syntax: the array name followed by an opening bracket ([), a comma- separated list of up to five index index expressions, and a closing bracket (]).
  • Page 42: Iteration, Foreach

    Chapter 7. Associative arrays 7.4. Iteration, foreach Like awk, SystemTap's foreach creates a loop that iterates over key tuples of an array, not only values. The iteration may be sorted by any single key or a value by adding an extra plus symbol (+) or minus symbol (-) to the code.
  • Page 43: Statistics (Aggregates)

    Chapter 8. Statistics (aggregates) Aggregate instances are used to collect statistics on numerical values, when it is important to accumulate new data quickly and in large volume. These instances operate without exclusive locks, and store only aggregated stream statistics. Aggregates make sense only for global variables. They are stored individually or as elements of an array.
  • Page 44: Histogram Extractors

    Chapter 8. Statistics (aggregates) 8.4. Histogram extractors The following functions provide methods to extract histogram information. Printing a histogram with the print family of functions renders a histogram object as a tabular "ASCII art" bar chart. 8.4.1. @hist_linear The statement @hist_linear(v,L,H,W) represents a linear histogram v, where L and H represent the lower and upper end of a range of values and W represents the width (or size) of each bucket within the range.
  • Page 45: Hist_Log

    @hist_log 8.4.2. @hist_log The statement @hist_log(v) represents a base-2 logarithmic histogram. Empty buckets are replaced with a tilde (~) character in the same way as @hist_linear() (see above). The following is an example. global reads probe netdev.receive { reads <<< length probe end { print(@hist_log(reads)) This generates the following output.
  • Page 47: Predefined Functions

    Chapter 9. Predefined functions Unlike built-in functions, predefined functions are implemented in tapsets. 9.1. Output functions The following sections describe the functions you can use to output data. 9.1.1. error General syntax: error:unknown (msg:string) This function logs the given string to the error stream. It appends an implicit end-of-line. It blocks any further execution of statements in this probe.
  • Page 48 Chapter 9. Predefined functions The printf function takes a formatting string as an argument, and a number of values of corresponding types, and prints them all. The format must be a literal string constant. The printf formatting directives are similar to those of C, except that they are fully checked for type by the translator. The formatting string can contain tags that are defined as follows: %[flags][width][.precision][length]specifier Where specifier is required and defines the type and the interpretation of the value of the...
  • Page 49 printf Used with o, x or X specifiers the value is preceded with 0, 0x or 0X respectively for non- zero values. Left-pads the number with zeroes instead of spaces, where padding is specified (see width sub-specifier). Table 9.2. printf flag values Width Description (number)
  • Page 50: Printd

    Chapter 9. Predefined functions printf("%3d: %1b%1b%1b\n", i, i, i-32, i-64) exit() This prints: 97: aA! 98: bB" 99: cC# 100: dD$ 101: eE% 102: fF& 103: gG' 104: hH( 105: iI) 106: jJ* 107: kK+ 108: lL, 109: mM- Another example: stap -e 'probe begin{printf("%b%b", 0xc0dedbad, \ 0x12345678);exit()}' | hexdump -C This prints:...
  • Page 51: Printdln

    printdln printd:unknown (delimiter:string, ) This function takes a string delimiter and two or more values of any type, then prints the values with the delimiter interposed. The delimiter must be a literal string constant. For example: printd("/", "one", "two", "three", 4, 5, 6) prints: one/two/three/4/5/6 9.1.6.
  • Page 52: System

    Chapter 9. Predefined functions This function operates like printf, but returns the formatted string rather than printing it. 9.1.10. system General syntax: system (cmd:string) The system function runs a command on the system. The specified command runs in the background once the current probe completes.
  • Page 53: Cpu

    caller_addr:long () Returns the address of the calling function. It works only for return probes. 9.2.4. cpu General syntax: cpu:long () Returns the current cpu number. 9.2.5. egid General syntax: egid:long () Returns the effective group ID of the current process. 9.2.6.
  • Page 54: Is_Return

    Chapter 9. Predefined functions 9.2.9. is_return General syntax: is_return:long () Returns 1 if the probe point is a return probe, else it returns zero. Deprecated. 9.2.10. pexecname General syntax: pexecname:string () Returns the name of the parent process. 9.2.11. pid General syntax: pid:long () Returns the process ID of the current process.
  • Page 55: Print_Backtrace

    print_backtrace uid:long () Returns the user ID of the current task. 9.2.15. print_backtrace General syntax: print_backtrace:unknown () This function is equivalent to print_stack(backtrace()), except that deeper stack nesting is supported. The function does not return a value. 9.2.16. print_regs General syntax: print_regs:unknown () This function prints a register dump.
  • Page 56: Stack_Used

    Chapter 9. Predefined functions stack_unused:long () Returns how many bytes are currently unused in the stack. 9.2.20. stack_used General syntax: stack_used:long () Returns how many bytes are currently used in the stack. 9.2.21. stp_pid stp_pid:long () Returns the process ID of the of the staprun process. 9.2.22.
  • Page 57: Task_Cpu

    task_cpu 9.3.1. task_cpu General syntax: task_cpu:long (task:long) Returns the scheduled cpu for the given task. 9.3.2. task_current General syntax: task_current:long () Returns the address of the task_struct representing the current process. This address can be passed to the various task_*() functions to extract more task-specific data. 9.3.3.
  • Page 58: Task_Nice

    Chapter 9. Predefined functions task_gid:long (task:long) Returns the group ID of the given task. 9.3.7. task_nice General syntax: task_nice:long (task:long) Returns the nice value of the given task. 9.3.8. task_parent General syntax: task_parent:long (task:long) Returns the address of the parent task_struct of the given task. This address can be passed to the various task_*() functions to extract more task-specific data.
  • Page 59: Task_Tid

    task_tid task_state:long (task:long) Returns the state of the given task. Possible states are: TASK_RUNNING TASK_INTERRUPTIBLE TASK_UNINTERRUPTIBLE TASK_STOPPED TASK_TRACED EXIT_ZOMBIE EXIT_DEAD 9.3.12. task_tid General syntax: task_tid:long (task:long) Returns the thread ID of the given task. 9.3.13. task_uid General syntax: task_uid:long (task:long) Returns the user ID of the given task.
  • Page 60: Accessing String Data At A Probe Point

    Chapter 9. Predefined functions 9.4. Accessing string data at a probe point The following functions provide methods to access string data at a probe point. 9.4.1. kernel_string General syntax: kernel_string:string (addr:long) Copies a string from kernel space at a given address. The validation of this address is only partial. 9.4.2.
  • Page 61: Initializing Queue Statistics

    Initializing queue statistics user_string_quoted:string (addr:long) This function copies a string from userspace at given address. Any ASCII characters that are not printable are replaced by the corresponding escape sequence in the returned string. 9.5. Initializing queue statistics The queue_stats tapset provides functions that, when given notification of queuing events like wait, run, or done, track averages such as queue length, service and wait times, and utilization.
  • Page 62: Qsq_Print

    Chapter 9. Predefined functions qsq_blocked:long (qname:string, scale:long) This function returns the fraction of elapsed time during which one or more requests were on the wait queue. 9.6.2. qsq_print General syntax: qsq_print:unknown (qname:string) This function prints a line containing the following statistics for the given queue: •...
  • Page 63: Qsq_Utilization

    qsq_utilization qsq_throughput:long (qname:string, scale:long) This function returns the average number of requests served per microsecond. 9.6.6. qsq_utilization General syntax: qsq_utilization:long (qname:string, scale:long) This function returns the average time in microseconds that at least one request was being serviced. 9.6.7. qsq_wait_queue_length General syntax: qsq_wait_queue_length:long (qname:string, scale:long) This function returns the average length of the wait queue.
  • Page 64: Probe Point Identification

    Chapter 9. Predefined functions qsq_start ("block-write") probe timer.ms(10000) { exit () # synthesize queue work/service using three randomized "threads" for each queue. global tc function qs_doit (thread, name) { n = tc[thread] = (tc[thread]+1) % 3 # per-thread state counter if (n==1) qs_wait (name) else if (n==2) qs_run (name) else if (n==0) qs_done (name)
  • Page 65: Probefunc

    probefunc pp:string () This function returns the probe point associated with a currently running probe handler, including alias and wild-card expansion effects. 9.7.2. probefunc General syntax: probefunc:string () This function returns the name of the function being probed. 9.7.3. probemod General syntax: probemod:string () This function returns the name of the module containing the probe point.
  • Page 66: Returnstr

    Chapter 9. Predefined functions errno_str:string (err:long) This function returns the symbolic string associated with the given error code, such as ENOENT for the number 2, or E#3333 for an out-of-range value such as 3333. 9.8.3. returnstr General syntax: returnstr:string (returnp:long) This function is used by the syscall tapset, and returns a string.
  • Page 67: Thread_Timestamp

    thread_timestamp 39 swapper(0): <- usb_hcd_giveback_urb 45 swapper(0): <- usb_hcd_irq 0 usb-storage(1338): -> usb_submit_urb 6 usb-storage(1338): -> usb_hcd_submit_urb 12 usb-storage(1338): -> usb_get_urb 18 usb-storage(1338): <- usb_get_urb 25 usb-storage(1338): <- usb_hcd_submit_urb 29 usb-storage(1338): <- usb_submit_urb 0 swapper(0): -> usb_hcd_irq 7 swapper(0): <- usb_hcd_irq 9.8.5.
  • Page 68: Substr

    Chapter 9. Predefined functions This function converts the string representation of a number to an integer. The base parameter indicates the number base to assume for the string (e.g. 16 for hex, 8 for octal, 2 for binary). 9.9.4. substr General syntax: substr:string (str:string, start:long, stop:long) This function returns the substring of str starting from character position start and ending at...
  • Page 69: Get_Cycles

    get_cycles 9.10.1. get_cycles General syntax: get_cycles:long () This function returns the processor cycle counter value if available, else it returns zero. 9.10.2. gettimeofday_ms General syntax: gettimeofday_ms:long () This function returns the number of milliseconds since the UNIX epoch. 9.10.3. gettimeofday_ns General syntax: gettimeofday_ns:long () This function returns the number of nanoseconds since the UNIX epoch.
  • Page 70: Addr_To_Node

    Chapter 9. Predefined functions 9.11.1. addr_to_node General syntax: addr_to_node:long (addr:long) This function accepts an address, and returns the node that the given address belongs to in a NUMA system. 9.11.2. exit General syntax: exit:unknown () This function enqueues a request to shut down the SystemTap session. It does not unwind the current probe handler, nor block new probe handlers.
  • Page 71: For Further Reference

    Chapter 10. For Further Reference For more information, see: http://sourceware.org/systemtap/tutorial/ • The SystemTap tutorial at http://sourceware.org/systemtap/wiki • The SystemTap wiki at http://sourceware.org/systemtap/documentation.html • The SystemTap documentation page at • From an unpacked source tarball or GIT directory, the examples in in the src/examples directory, the tapsets in the src/tapset directory, and the test scripts in the src/testsuite directory.
  • Page 73: Index

    Index end, 21 epilogue-style aliases, 10 errno_str, 57 error, 39 Symbols euid, 45 $, 25 example scripts, 1 +=, 10 execname, 45 ;, 23, 30 exit, 62 <<<, 35 expression, 29 =, 10 expressions, 24 ?, 15, 24 extraction, 35 { }, 31 fn, 25 addr_to_node, 62...
  • Page 74 Index kernel_v, 26 qsq_print, 54 kernel_vr, 26 qsq_service_time, 54 qsq_start, 54 qsq_throughput, 54 qsq_utilization, 55 language, 1 qsq_wait_time, 55 limits, 4 queue statistics, 53 literals, 23, 25 local arrays, 11 log, 39 randomize, 20 recursion, 3 return, 31 max, 35 return probes, 20 milliseconds, 20 returnstr, 58...
  • Page 75 task_uid, 51 text_str, 60 text_strn, 60 THIS, 13 thread_indent, 58 thread_timestamp, 59 tid, 46 timer probes, 19 timestamps, 60 tokens, 26 uid, 46 unary, 24 unused variables, 11 user_string, 52 user_string2, 52 user_string_quoted, 52 user_string_warn, 52 variables, 11 warn, 44 while, 31 whitespace, 24 wildcards, 15...

Table of Contents