Skip to content

Examples TracePoints

Eduard Mishkurov edited this page May 16, 2026 · 3 revisions

Trace Points example

TracePoints

This example demonstrates trace points: dormant logging instructions that count calls by default and start producing normal logme output only after they are enabled through runtime control.

The example first executes the code with trace points disabled, prints the collected counters, enables all trace points with trace enable *:*:*, executes the same workload again, and then disables them.

Console output

2026-05-16 11:03:18:842   main(): Trace Points example
2026-05-16 11:03:18:847   PrintControlResult(): control> trace list *:*:*
2026-05-16 11:03:18:847   PrintControlResult(): off C:\Users\TRITON 17X\AppData\Local\Temp\logme_examples_ia8yg37j\logme\examples\TracePoints\TracePoints.cpp:ProcessItem:19 hits=2
off C:\Users\TRITON 17X\AppData\Local\Temp\logme_examples_ia8yg37j\logme\examples\TracePoints\TracePoints.cpp:ProcessItem:15 hits=6
off C:\Users\TRITON 17X\AppData\Local\Temp\logme_examples_ia8yg37j\logme\examples\TracePoints\TracePoints.cpp:RunWorkload:31 hits=6
off C:\Users\TRITON 17X\AppData\Local\Temp\logme_examples_ia8yg37j\logme\examples\TracePoints\TracePoints.cpp:RunWorkload:27 hits=1

2026-05-16 11:03:18:847   PrintControlResult(): control> trace enable *:*:*
2026-05-16 11:03:18:847   PrintControlResult(): ok: 4 enabled
2026-05-16 11:03:18:847   TracePoints.cpp(27): RunWorkload(): RunWorkload entered
2026-05-16 11:03:18:847   TracePoints.cpp(31): RunWorkload(): loop iteration: i=0
2026-05-16 11:03:18:847   TracePoints.cpp(15): ProcessItem(): ProcessItem entered: value=0
2026-05-16 11:03:18:847 W TracePoints.cpp(19): ProcessItem(): rare branch: value=0
2026-05-16 11:03:18:847   TracePoints.cpp(31): RunWorkload(): loop iteration: i=1
2026-05-16 11:03:18:847   TracePoints.cpp(15): ProcessItem(): ProcessItem entered: value=1
2026-05-16 11:03:18:847   TracePoints.cpp(31): RunWorkload(): loop iteration: i=2
2026-05-16 11:03:18:847   TracePoints.cpp(15): ProcessItem(): ProcessItem entered: value=2
2026-05-16 11:03:18:847   TracePoints.cpp(31): RunWorkload(): loop iteration: i=3
2026-05-16 11:03:18:847   TracePoints.cpp(15): ProcessItem(): ProcessItem entered: value=3
2026-05-16 11:03:18:847 W TracePoints.cpp(19): ProcessItem(): rare branch: value=3
2026-05-16 11:03:18:847   TracePoints.cpp(31): RunWorkload(): loop iteration: i=4
2026-05-16 11:03:18:847   TracePoints.cpp(15): ProcessItem(): ProcessItem entered: value=4
2026-05-16 11:03:18:847   TracePoints.cpp(31): RunWorkload(): loop iteration: i=5
2026-05-16 11:03:18:847   TracePoints.cpp(15): ProcessItem(): ProcessItem entered: value=5
2026-05-16 11:03:18:847   PrintControlResult(): control> trace stat *:*:*
2026-05-16 11:03:18:847   PrintControlResult(): on  C:\Users\TRITON 17X\AppData\Local\Temp\logme_examples_ia8yg37j\logme\examples\TracePoints\TracePoints.cpp:ProcessItem:19 hits=4
on  C:\Users\TRITON 17X\AppData\Local\Temp\logme_examples_ia8yg37j\logme\examples\TracePoints\TracePoints.cpp:ProcessItem:15 hits=12
on  C:\Users\TRITON 17X\AppData\Local\Temp\logme_examples_ia8yg37j\logme\examples\TracePoints\TracePoints.cpp:RunWorkload:31 hits=12
on  C:\Users\TRITON 17X\AppData\Local\Temp\logme_examples_ia8yg37j\logme\examples\TracePoints\TracePoints.cpp:RunWorkload:27 hits=2
... output truncated, 7 lines omitted ...

Source code

Sources

Repository folder: examples/TracePoints

TracePoints.cpp

Open in repository

#include <Logme/ArgumentList.h>
#include <Logme/Logme.h>

using namespace Logme;

static ChannelPtr EnsureVisibleChannel(const ID& id)
{
  auto ch = Logme::Instance->CreateChannel(id);
  ch->AddLink(::CH);
  return ch;
}

static int ProcessItem(int value)
{
  LogmeTPt("ProcessItem entered: %s", ARGS1(value));

  if ((value % 3) == 0)
  {
    LogmeW_TPt("rare branch: %s", ARGS1(value));
  }

  return value * 2;
}

static void RunWorkload(const ChannelPtr& ch)
{
  LogmeTPt(ch, "RunWorkload entered");

  for (int i = 0; i < 6; ++i)
  {
    LogmeTPt(ch, "loop iteration: %s", ARGS1(i));
    ProcessItem(i);
  }
}

static void PrintControlResult(const char* command)
{
  LogmeI("control> %s", command);
  LogmeI("%s", Logme::Instance->Control(command).c_str());
}

int main()
{
  auto ch = EnsureVisibleChannel(ID{ "examples_trace" });

  LogmeI(ch, "Trace Points example");

  RunWorkload(ch);
  PrintControlResult("trace list *:*:*");

  PrintControlResult("trace enable *:*:*");
  RunWorkload(ch);

  PrintControlResult("trace stat *:*:*");
  PrintControlResult("trace disable *:*:*");

  RunWorkload(ch);
  PrintControlResult("trace stat *:*:*");

  return 0;
}

Previous: ThreadContext | Next: TypicalUsage examples

Clone this wiki locally