2.0.4-1 (Oct 24th, 2025)
New features:
-
The TCP and UDP providers have been implemented.
-
An stapsdt provider has been implemented for user-space static probes defined via stapsdt ELF notes. The provider also supports probes created dynamically via libstapsdt.
-
The User's Guide is now part of the git repository in Markdown form and part of an install.
-
Example scripts are now part of the git repository and installed under
/usr/share/doc/dtrace/examples. -
One can now use [u]stack() as variable values of type "struct dt_stack" or "dt_stack_t".
-
There is now a context file, which explains DTrace, to use with LLMs.
-
Comments using // are now supported.
-
The return() action is now implemented, allowing error injection by forcing a given return value for a kernel function. The kernel must be configured with CONFIG_BPF_KPROBE_OVERRIDE and CONFIG_FUNCTION_ERROR_INJECTION.
Bugfixes:
-
A commonplace problem with dynamics variables overwriting one another was identified and fixed.
-
fbt probes in the "dtrace -l" listing have been restored.
-
Function names have been restored to pid return probes.
-
The built-in variables caller and stackdepth have been corrected by recognizing when additional BPF stack frames must be skipped.
-
char arrays can now be used in aggregation keys.
-
The use of -w is now required for destructive actions, even if a clause is being ignored with -Z.
-
Both 'cwd' and 'root' now work (and other inline vars are now tested).
-
The proc:::exec args[0] argument has been corrected for the case that execveat() is the underlying function.
User-visible changes:
-
DIFO is now freed once a probe is loaded, substantially reducing memory consumption when a lot of probes are specified.
-
Per-CPU agg-map IDs are now cached, substantially improving trunc() performance on the consumer side on many-CPU systems.
-
D compilation now allows enum declarations where the last enumerator value is followed by a comma.
-
alloca() pointers are now printed as actual pointer values into kernel space rather than as relatively small offsets into the DTrace scratch memory area.
-
Strings are now handled better with regards to empty strings, the meaning of strsize, testing, and NUL padding.
-
SDT probes that were not firing because they were dependent on fbt probes that were not firing with the fentry/freturn implementation are now dependent on rawfbt probes (kprobes).
-
The USDT parser now handles encoded hyphens.
-
Function Psystem_daemon() now has better logic for detecting system daemons.
-
Management of CTF and BTF data has been improved. E.g.,
-
If the kernel is not compiled with CTF or BTF, there is an error message.
-
There is now an -xbtfpath option, with -xbtfpath=none disabling the use of BTF data.
-
A BTF ID symbol lookup now checks that the module BTF data is loaded.
-
-
If a pid probe description is supplied with a wildcard probe name (that is, function offset), instructions are skipped if the kernel does not allow probe attach.
Internal changes:
-
The mechanism to skip common fields when querying tracepoint probe arguments is now more robust.
-
tstrings are now managed better, including elimination of some leaks, thereby allowing more complex expressions.
-
DTrace version numbering is now consolidated.
-
References in dlibs to major_names now explicitly mention
vmlinux, so as to avoid loading modules needlessly. -
Parsing and lexical analysis has been improved.
-
The subtraction of two alloca() pointers no longer receives the ALLOCA taint.
-
Aggregations are now snapshot "just in time" for theoretically better performance and for more consistent reporting.
-
USDT discovery has been optimized a little. USDT memory leaks in hash tables have been cleaned up.
-
Some unused variables have been eliminated.
Testsuite changes:
-
Various tests have been made more stringent, reliable, or suitable for newer kernels.
-
Test dependence on tick-* probes has once again been reduced yet further.
-
New tests have been added for more coverage.
-
.r.p files have been moved from /bin/sh to /bin/bash for better behavior on more distributions.
-
Script
get_remote.shis now installed for better testing of RPMs.
Build-time:
-
BPF library functions are now compiled with -ffreestanding.
-
The developer package now includes previous omissions.