As of FreeBSD 9.2-RELEASE, Dtrace is enabled by default in the GENERIC kernel. We where already able to activate Dtrace, on earlier releases, but we would have to make a custom kernel. Not always what you want because it breaks binary updates.
Now that Dtrace is enabled (and updated) in FreeBSD, everyone can use it without the hassle of a custom kernel. You still have to load Dtrace's modules. Let's see how it works.
first you go root and try a Dtrace related command:
$ sudo -Es Password: # dtruss ls dtrace: failed to initialize dtrace: DTrace device not available on system
Looks like Dtrace is not loaded:
# kldstat Id Refs Address Size Name 1 23 0xffffffff80200000 15b93c0 kernel 2 1 0xffffffff817ba000 23d078 zfs.ko 3 2 0xffffffff819f8000 84e0 opensolaris.ko 4 1 0xffffffff81a01000 4828 coretemp.ko 5 1 0xffffffff81c12000 2bce pflog.ko 6 1 0xffffffff81c15000 3078d pf.ko 7 1 0xffffffff81c46000 57bcf linux.ko 8 1 0xffffffff81c9e000 3c3d wlan_xauth.ko
lets find Dtrace related modules:
# ls /boot/kernel/dtrace* /boot/kernel/dtrace.ko /boot/kernel/dtrace_test.ko.symbols /boot/kernel/dtrace.ko.symbols /boot/kernel/dtraceall.ko /boot/kernel/dtrace_test.ko /boot/kernel/dtraceall.ko.symbols
/boot/kernel/dtraceall.ko
looks like a winner.
# kldload dtraceall # kldstat Id Refs Address Size Name 1 59 0xffffffff80200000 15b93c0 kernel 2 1 0xffffffff817ba000 23d078 zfs.ko 3 16 0xffffffff819f8000 84e0 opensolaris.ko 4 1 0xffffffff81a01000 4828 coretemp.ko 5 1 0xffffffff81c12000 2bce pflog.ko 6 1 0xffffffff81c15000 3078d pf.ko 7 1 0xffffffff81c46000 57bcf linux.ko 8 1 0xffffffff81c9e000 3c3d wlan_xauth.ko 9 1 0xffffffff81ca2000 ba2 dtraceall.ko 10 1 0xffffffff81ca3000 4ed3 profile.ko 11 3 0xffffffff81ca8000 402c cyclic.ko 12 12 0xffffffff81cad000 23dbaa dtrace.ko 13 1 0xffffffff81eeb000 fb3d systrace_freebsd32.ko 14 1 0xffffffff81efb000 109bd systrace.ko 15 1 0xffffffff81f0c000 45bb sdt.ko 16 1 0xffffffff81f11000 4926 lockstat.ko 17 1 0xffffffff81f16000 bf0b fasttrap.ko 18 1 0xffffffff81f22000 6673 fbt.ko 19 1 0xffffffff81f29000 4eeb dtnfsclient.ko 20 1 0xffffffff81f2e000 1dd92 nfsclient.ko 21 1 0xffffffff81f4c000 47c0 nfs_common.ko 22 1 0xffffffff81f51000 55f2 dtnfscl.ko 23 1 0xffffffff81f57000 45cd dtmalloc.ko 24 1 0xffffffff81f5c000 44fc dtio.ko
tadaaaam:
# dtruss ls SYSCALL(args) = return mmap(0x0, 0x8000, 0x3) = 6418432 0 issetugid(0x0, 0x0, 0x0) = 0 0 lstat("/etc\0", 0x7FFFFFFFC3C0, 0x0) = 0 0 lstat("/etc/libmap.conf\0", 0x7FFFFFFFC3C0, 0x0) = 0 0 open("/etc/libmap.conf\0", 0x0, 0x81FA20) = 3 0 ...
Happy debugging/tracing/auditing.