uftrace v0.13
I'm happy to announce that uftrace v0.13 is released.
You can get it from the below link:
https://github.com/namhyung/uftrace/releases/tag/v0.13
As usual, this release contains new features and many bug fixes.
This release comes with a couple of new filtering options. The first one
is the location filter. The -L or --loc-filter option can specify names
of directory or file for the source code. That means the binary should
have the debug information (DWARF). Since uftrace saves the (reduced
form of) debug info separately, we can use this option at replay as well.
$ uftrace -L myfile.c myprog
The above will show functions only in the 'myfile.c' file. You can also
use directory names and mix the two. When you use a directory name, it
will match all files under the directory. And the regex or the wildcard
patterns can be used for more fine-grainded filtering.
The next one is the size filter using -Z or --size-filter option.
Actually this is not a new addition, we had it for the dynamic tracing.
But now we can use it as a general filter regardless if you use the
dynamic tracing or not.
$ uftrace -Z 100 myprog
The above will show functions that their size is greater than equal to
100 bytes. At record (or in live command), it can read the size from
the ELF symbol table directly. When you use the option during replay
(or report and so on), it determines the size from the symbol file in
the uftrace data.
But it can have a small difference than the original symbol size
(usually bigger than the original). This is because the symbol file
doesn't actually save the size of functions. It currently saves the
symbol addresses only and function size is calculated as a difference
between the two adjacent fucntions. If your compiler added some
paddings at the end of the function (to aligned the function start
address), it'll have a different size. Please be aware of that when
using it from replay.
To check the size in the symbol file, you can use 'size' field in the
uftrace report output.
$ uftrace report -f size
This will show the size of functions (saved in the uftrace data).
The uftrace dump got --mermaid
option to produce the mermaid format
[1] for visualizing function call graphs. Also it supports to change
the base function of the graph interactively.
The --no-sched-preempt option is to suppress schedule events only if
it's pre-empted. So the voluntary schedules will be shown.
And we added many testing/CI infra changes thanks for Github actions.
I appreciate Travis CI team for the works so far but decided to move.
Finally, it added the preliminary support for running an agent in
background. It does nothing as of now, but it will talk to external
uftrace processes via a unix socket to control the tracing behavior
later. The uftrace live got -p option to specify the pid of the
original process with the agent.
There are many more things. Thank you all for making uftrace more
useful, efficient and portable!