Tracing with DTrace/dtruss

The dtruss command line tool can be used to examine what a running process is doing. Other than, e.g., strace on Linux, dtruss can be used to watch already-running processes. This makes it more suitable to watch processes that have been launched by, e.g., the launch command.

$ sudo pkg install dtrace-toolkit
$ sudo kldload dtraceall
$ launch FeatherPad
// In another terminal:
$ ps ax | grep featherpad
// Then use the PID of the featherpad process for the next command:
$ sudo dtruss -p 1886 -f

Note

If you get probe description syscall:::entry does not match any probes, then possibly you loaded kldload dtrace rather than kldload dtraceall.

The FreeBSD DTrace Tutorial has many one-liner examples for tasks like observing

  • File Opens

  • Syscall Counts By Process

  • Distribution of read() Bytes

  • Timing read() Syscall

  • Measuring CPU Time in read()

  • Count Process-Level Events

  • Profile On-CPU Kernel Stacks

  • Scheduler Tracing

  • TCP Inbound Connections

  • Raw Kernel Tracing

There is also a full list of DTrace One-Liners to pick up more DTrace functionality.

Note

In the future a graphical utility might be written to automate common tracing tasks.