Welcome to the barectf 3.1 documentation!

What’s barectf?

barectf (from bare metal and CTF) is a generator of tracer which produces CTF data streams.

CTF is a binary trace format designed to be very fast to write without compromising great flexibility.

barectf reads a configuration and produces:

  • A CTF metadata stream file.

  • ANSI C source code files which, once compiled, constitute a tracer which writes CTF data streams.

    The generated C source code has no other dependencies than a few C standard library headers.

Your C/C++ program can include the generated barectf.h header and call its barectf_trace_*() functions from source locations of your choice to write event records to CTF packets. You can then read and analyze the CTF traces with tools such as Babeltrace 2 and Trace Compass.

Get started now with a simple barectf configuration.

Read How barectf works to understand the mechanics and terminology of barectf.

Do I need barectf?

You may need barectf if you need to add CTF tracing capabilities to your bare metal or embedded application/system.

Because barectf generates portable ANSI C code, you can compile it and use it for virtually any system.

If you need to add CTF instrumentation to Linux applications or to the Linux kernel, have a look at LTTng which offers a comprehensive tracing solution for Linux.

Components of barectf

The barectf project contains:

  • A Python 3 package, named barectf, which offers an API to programatically create a barectf configuration and generate files out of it.

    The documentation of the barectf Python 3 package isn’t available yet.

  • A command-line interface (CLI), named barectf, which can process a barectf YAML configuration file to generate files out of it.

  • Installed standard partial YAML files which you can include in your barectf YAML configuration.

It’s “barectf”!

The name of the project is “barectf”; not “BareCTF”, nor “bareCTF”, nor “Barectf”.


The barectf project, including this documentation, is licensed under the MIT license.