template <invocable<std::string_view> Sink>
class Writer
Defined at line 66 of file ../../src/lib/symbolizer-markup/include/lib/symbolizer-markup/writer.h
Writer emits symbolizer markup. Writing is abstracted by way of Sink, which
is any type that is callable with a std::string_view argument.
Each call represents a single markup element.
Example usage:
```
symbolizer_markup::Writer writer(std::ref(sink));
// Color will persist until `red` goes out of scope, at which point it will
// return to the default.
auto red = writer.ChangeColor(symbolizer_markup::Color::kRed);
// Apart from ChangeColor(), calls can be chained.
writer.Reset()
.Newline()
.Symbol("foobar")
.Newline()
.Data("baz")
.Newline();
```
Public Methods
void Writer<Sink> (Sink sink)
Defined at line 68 of file ../../src/lib/symbolizer-markup/include/lib/symbolizer-markup/writer.h
auto ChangeColor (Color color, bool bold)
Changes the output color, optionally boldened. Once the return value goes
out of scope, the color is changed back to the default. Among subsequent
calls, 'last wins'.
Defined at line 79 of file ../../src/lib/symbolizer-markup/include/lib/symbolizer-markup/writer.h
Writer<Sink> & Symbol (std::string_view name)
Emits the markup for a symbol or type, given its linkage name.
{{{symbol:$name}}}
Defined at line 104 of file ../../src/lib/symbolizer-markup/include/lib/symbolizer-markup/writer.h
Writer<Sink> & Symbol (std::string_view name)
Emits the markup for a symbol or type, given its linkage name.
{{{symbol:$name}}}
Defined at line 104 of file ../../src/lib/symbolizer-markup/include/lib/symbolizer-markup/writer.h
Writer<Sink> & Code (uint64_t pc)
Emits the markup for the memory address of a code location.
{{{pc:$addr}}}
Defined at line 109 of file ../../src/lib/symbolizer-markup/include/lib/symbolizer-markup/writer.h
Writer<Sink> & Code (uint64_t pc)
Emits the markup for the memory address of a code location.
{{{pc:$addr}}}
Defined at line 109 of file ../../src/lib/symbolizer-markup/include/lib/symbolizer-markup/writer.h
Writer<Sink> & Data (uint64_t addr)
Emits the markup for the memory address of a data location.
{{{data:$addr}}}
Defined at line 114 of file ../../src/lib/symbolizer-markup/include/lib/symbolizer-markup/writer.h
Writer<Sink> & Data (uint64_t addr)
Emits the markup for the memory address of a data location.
{{{data:$addr}}}
Defined at line 114 of file ../../src/lib/symbolizer-markup/include/lib/symbolizer-markup/writer.h
Writer<Sink> & ReturnAddressFrame (unsigned int frame, uint64_t pc)
Emits the markup for a backtrace frame off of the callstack.
{{{bt:$frame:$pc:ra}}}
Defined at line 119 of file ../../src/lib/symbolizer-markup/include/lib/symbolizer-markup/writer.h
Writer<Sink> & ReturnAddressFrame (unsigned int frame, uint64_t pc)
Emits the markup for a backtrace frame off of the callstack.
{{{bt:$frame:$pc:ra}}}
Defined at line 119 of file ../../src/lib/symbolizer-markup/include/lib/symbolizer-markup/writer.h
Writer<Sink> & ExactPcFrame (unsigned int frame, uint64_t pc)
Emits the markup for a backtrace frame leading into an interrupt.
{{{bt:$frame:$pc:pc}}}
Defined at line 126 of file ../../src/lib/symbolizer-markup/include/lib/symbolizer-markup/writer.h
Writer<Sink> & ExactPcFrame (unsigned int frame, uint64_t pc)
Emits the markup for a backtrace frame leading into an interrupt.
{{{bt:$frame:$pc:pc}}}
Defined at line 126 of file ../../src/lib/symbolizer-markup/include/lib/symbolizer-markup/writer.h
Writer<Sink> & Dumpfile (std::string_view type, std::string_view name, std::string_view name_suffix)
Emits the markup for a dumpfile, given its type and name.
{{{dumpfile:$type:$name}}}
Defined at line 141 of file ../../src/lib/symbolizer-markup/include/lib/symbolizer-markup/writer.h
Writer<Sink> & Dumpfile (std::string_view type, std::string_view name, std::string_view name_suffix)
Emits the markup for a dumpfile, given its type and name.
{{{dumpfile:$type:$name}}}
Defined at line 141 of file ../../src/lib/symbolizer-markup/include/lib/symbolizer-markup/writer.h
Writer<Sink> & Reset ()
Emits the markup to reset the context.
{{{reset}}}
Defined at line 155 of file ../../src/lib/symbolizer-markup/include/lib/symbolizer-markup/writer.h
Writer<Sink> & ElfModule (unsigned int id, std::string_view name, std::span<const std::byte> build_id)
Emits the markup for a given ELF module.
{{{module:$id:$name:elf:$build_id}}}
Defined at line 160 of file ../../src/lib/symbolizer-markup/include/lib/symbolizer-markup/writer.h
Writer<Sink> & ElfModule (unsigned int id, std::string_view name, std::span<const std::byte> build_id)
Emits the markup for a given ELF module.
{{{module:$id:$name:elf:$build_id}}}
Defined at line 160 of file ../../src/lib/symbolizer-markup/include/lib/symbolizer-markup/writer.h
Writer<Sink> & ElfModule (unsigned int id, std::string_view name, std::span<const std::byte> build_id)
Emits the markup for a given ELF module.
{{{module:$id:$name:elf:$build_id}}}
Defined at line 160 of file ../../src/lib/symbolizer-markup/include/lib/symbolizer-markup/writer.h
Writer<Sink> & ElfModule (unsigned int id, std::string_view name, std::span<const std::byte> build_id)
Emits the markup for a given ELF module.
{{{module:$id:$name:elf:$build_id}}}
Defined at line 160 of file ../../src/lib/symbolizer-markup/include/lib/symbolizer-markup/writer.h
Writer<Sink> & ElfModule (unsigned int id, std::string_view name, std::span<const std::byte> build_id)
Emits the markup for a given ELF module.
{{{module:$id:$name:elf:$build_id}}}
Defined at line 160 of file ../../src/lib/symbolizer-markup/include/lib/symbolizer-markup/writer.h
Writer<Sink> & LoadImageMmap (uint64_t start, uint64_t size, unsigned int module_id, const MemoryPermissions & perms, uint64_t static_start)
Emits the markup for the load image of a module. The given permissions
must admit at least one of reading, writing, or execution.
{{mmap:$start:$size:load:$module_id:$perms:$static_start}}
Defined at line 173 of file ../../src/lib/symbolizer-markup/include/lib/symbolizer-markup/writer.h
Writer<Sink> & LoadImageMmap (uint64_t start, uint64_t size, unsigned int module_id, const MemoryPermissions & perms, uint64_t static_start)
Emits the markup for the load image of a module. The given permissions
must admit at least one of reading, writing, or execution.
{{mmap:$start:$size:load:$module_id:$perms:$static_start}}
Defined at line 173 of file ../../src/lib/symbolizer-markup/include/lib/symbolizer-markup/writer.h
Writer<Sink> & Literal (std::string_view str)
Helpers for writing markup fragments.
Defined at line 202 of file ../../src/lib/symbolizer-markup/include/lib/symbolizer-markup/writer.h
Writer<Sink> & Literal (std::string_view str)
Helpers for writing markup fragments.
Defined at line 202 of file ../../src/lib/symbolizer-markup/include/lib/symbolizer-markup/writer.h
Writer<Sink> & Literal (std::initializer_list<std::string_view> strs)
Defined at line 209 of file ../../src/lib/symbolizer-markup/include/lib/symbolizer-markup/writer.h
Writer<Sink> & Literal (std::initializer_list<std::string_view> strs)
Defined at line 209 of file ../../src/lib/symbolizer-markup/include/lib/symbolizer-markup/writer.h
Writer<Sink> & Literal (char c)
Defined at line 216 of file ../../src/lib/symbolizer-markup/include/lib/symbolizer-markup/writer.h
Writer<Sink> & Newline ()
Defined at line 218 of file ../../src/lib/symbolizer-markup/include/lib/symbolizer-markup/writer.h
Writer<Sink> & Prefix (std::string_view prefix)
Emits "$prefix: ", a conventional way of establishing the context of a
line of emitted markup.
Defined at line 222 of file ../../src/lib/symbolizer-markup/include/lib/symbolizer-markup/writer.h
Writer<Sink> & Prefix (std::string_view prefix)
Emits "$prefix: ", a conventional way of establishing the context of a
line of emitted markup.
Defined at line 222 of file ../../src/lib/symbolizer-markup/include/lib/symbolizer-markup/writer.h
Writer<Sink> & DecimalDigits (uint64_t n)
Emits the decimal digits for a given unsigned integer. Leading zeroes are
not emitted.
Defined at line 231 of file ../../src/lib/symbolizer-markup/include/lib/symbolizer-markup/writer.h
Writer<Sink> & DecimalDigits (uint64_t n)
Emits the decimal digits for a given unsigned integer. Leading zeroes are
not emitted.
Defined at line 231 of file ../../src/lib/symbolizer-markup/include/lib/symbolizer-markup/writer.h
Writer<Sink> & HexDigits (uint64_t n)
Emits the hexadecimal digits for a given unsigned integer. Leading zeroes
are not emitted, but a leading "0x is.
Defined at line 235 of file ../../src/lib/symbolizer-markup/include/lib/symbolizer-markup/writer.h
Writer<Sink> & HexDigits (uint64_t n)
Emits the hexadecimal digits for a given unsigned integer. Leading zeroes
are not emitted, but a leading "0x is.
Defined at line 235 of file ../../src/lib/symbolizer-markup/include/lib/symbolizer-markup/writer.h
Writer<Sink> & HexString (std::span<const std::byte> bytes)
Emits plain hex digits for each byte with no separators.
Defined at line 238 of file ../../src/lib/symbolizer-markup/include/lib/symbolizer-markup/writer.h
Writer<Sink> & HexString (std::span<const std::byte> bytes)
Emits plain hex digits for each byte with no separators.
Defined at line 238 of file ../../src/lib/symbolizer-markup/include/lib/symbolizer-markup/writer.h
Writer<Sink> & HexString (std::span<const std::byte> bytes)
Emits plain hex digits for each byte with no separators.
Defined at line 238 of file ../../src/lib/symbolizer-markup/include/lib/symbolizer-markup/writer.h
Writer<Sink> & HexString (std::span<const std::byte> bytes)
Emits plain hex digits for each byte with no separators.
Defined at line 238 of file ../../src/lib/symbolizer-markup/include/lib/symbolizer-markup/writer.h
Writer<Sink> & HexString (std::span<const std::byte> bytes)
Emits plain hex digits for each byte with no separators.
Defined at line 238 of file ../../src/lib/symbolizer-markup/include/lib/symbolizer-markup/writer.h