Skip to content

Examples TracePoints

Eduard Mishkurov edited this page Jun 10, 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-06-10 14:51:46:538   main(): Trace Points example
2026-06-10 14:51:46:538   PrintControlResult(): control> trace list *:*:*
2026-06-10 14:51:46:538   PrintControlResult(): off C:\Users\TRITON 17X\AppData\Local\Temp\logme_examples_1cmcawps\logme\examples\TracePoints\TracePoints.cpp:ProcessItem:19 hits=2
off C:\Users\TRITON 17X\AppData\Local\Temp\logme_examples_1cmcawps\logme\examples\TracePoints\TracePoints.cpp:ProcessItem:15 hits=6
off C:\Users\TRITON 17X\AppData\Local\Temp\logme_examples_1cmcawps\logme\examples\TracePoints\TracePoints.cpp:RunWorkload:31 hits=6
off C:\Users\TRITON 17X\AppData\Local\Temp\logme_examples_1cmcawps\logme\examples\TracePoints\TracePoints.cpp:RunWorkload:27 hits=1

2026-06-10 14:51:46:538   PrintControlResult(): control> trace enable *:*:*
2026-06-10 14:51:46:538   PrintControlResult(): ok: 4 enabled
2026-06-10 14:51:46:538   TracePoints.cpp(27): RunWorkload(): RunWorkload entered
2026-06-10 14:51:46:538   TracePoints.cpp(31): RunWorkload(): loop iteration: i=0
2026-06-10 14:51:46:538   TracePoints.cpp(15): ProcessItem(): ProcessItem entered: value=0
2026-06-10 14:51:46:538 W TracePoints.cpp(19): ProcessItem(): rare branch: value=0
2026-06-10 14:51:46:538   TracePoints.cpp(31): RunWorkload(): loop iteration: i=1
2026-06-10 14:51:46:538   TracePoints.cpp(15): ProcessItem(): ProcessItem entered: value=1
2026-06-10 14:51:46:538   TracePoints.cpp(31): RunWorkload(): loop iteration: i=2
2026-06-10 14:51:46:538   TracePoints.cpp(15): ProcessItem(): ProcessItem entered: value=2
2026-06-10 14:51:46:538   TracePoints.cpp(31): RunWorkload(): loop iteration: i=3
2026-06-10 14:51:46:538   TracePoints.cpp(15): ProcessItem(): ProcessItem entered: value=3
2026-06-10 14:51:46:538 W TracePoints.cpp(19): ProcessItem(): rare branch: value=3
2026-06-10 14:51:46:538   TracePoints.cpp(31): RunWorkload(): loop iteration: i=4
2026-06-10 14:51:46:538   TracePoints.cpp(15): ProcessItem(): ProcessItem entered: value=4
2026-06-10 14:51:46:538   TracePoints.cpp(31): RunWorkload(): loop iteration: i=5
2026-06-10 14:51:46:538   TracePoints.cpp(15): ProcessItem(): ProcessItem entered: value=5
2026-06-10 14:51:46:538   PrintControlResult(): control> trace stat *:*:*
2026-06-10 14:51:46:538   PrintControlResult(): on  C:\Users\TRITON 17X\AppData\Local\Temp\logme_examples_1cmcawps\logme\examples\TracePoints\TracePoints.cpp:ProcessItem:19 hits=4
on  C:\Users\TRITON 17X\AppData\Local\Temp\logme_examples_1cmcawps\logme\examples\TracePoints\TracePoints.cpp:ProcessItem:15 hits=12
on  C:\Users\TRITON 17X\AppData\Local\Temp\logme_examples_1cmcawps\logme\examples\TracePoints\TracePoints.cpp:RunWorkload:31 hits=12
on  C:\Users\TRITON 17X\AppData\Local\Temp\logme_examples_1cmcawps\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