Demonstrations of uthreads. uthreads traces thread creation events in Java or raw (C) pthreads, and prints details about the newly created thread. For Java threads, the thread name is printed; for pthreads, the thread's start function is printed, if there is symbol information to resolve it. For example, trace all Java thread creation events: # ./uthreads -l java 27420 Tracing thread events in process 27420 (language: java)... Ctrl-C to quit. TIME ID TYPE DESCRIPTION 18.596 R=9/N=0 start SIGINT handler 18.596 R=4/N=0 stop Signal Dispatcher ^C The ID column in the preceding output shows the thread's runtime ID and native ID, when available. The accuracy of this information depends on the Java runtime. Next, trace only pthread creation events in some native application: # ./uthreads 27450 Tracing thread events in process 27450 (language: c)... Ctrl-C to quit. TIME ID TYPE DESCRIPTION 0.924 27462 pthread primes_thread [primes] 0.927 27463 pthread primes_thread [primes] 0.928 27464 pthread primes_thread [primes] 0.928 27465 pthread primes_thread [primes] ^C The thread name ("primes_thread" in this example) is resolved from debuginfo. If symbol information is not present, the thread's start address is printed instead. USAGE message: # ./uthreads -h usage: uthreads.py [-h] [-l {c,java,none}] [-v] pid Trace thread creation/destruction events in high-level languages. positional arguments: pid process id to attach to optional arguments: -h, --help show this help message and exit -l {c,java,none}, --language {c,java,none} language to trace (none for pthreads only) -v, --verbose verbose mode: print the BPF program (for debugging purposes) examples: ./uthreads -l java 185 # trace Java threads in process 185 ./uthreads -l none 12245 # trace only pthreads in process 12245