Skip to content

Examples TracePoints

Eduard Mishkurov edited this page Jun 3, 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-03 16:33:15:295   main(): Trace Points example
2026-06-03 16:33:15:302   PrintControlResult(): control> trace list *:*:*
2026-06-03 16:33:15:302   PrintControlResult(): off C:\Source\infra\logme\examples\TracePoints\TracePoints.cpp:ProcessItem:19 hits=2
off C:\Source\infra\logme\examples\TracePoints\TracePoints.cpp:ProcessItem:15 hits=6
off C:\Source\infra\logme\examples\TracePoints\TracePoints.cpp:RunWorkload:31 hits=6
off C:\Source\infra\logme\examples\TracePoints\TracePoints.cpp:RunWorkload:27 hits=1

2026-06-03 16:33:15:302   PrintControlResult(): control> trace enable *:*:*
2026-06-03 16:33:15:302   PrintControlResult(): ok: 4 enabled
2026-06-03 16:33:15:302   TracePoints.cpp(27): RunWorkload(): RunWorkload entered
2026-06-03 16:33:15:302   TracePoints.cpp(31): RunWorkload(): loop iteration: i=0
2026-06-03 16:33:15:302   TracePoints.cpp(15): ProcessItem(): ProcessItem entered: value=0
2026-06-03 16:33:15:302 W TracePoints.cpp(19): ProcessItem(): rare branch: value=0
2026-06-03 16:33:15:302   TracePoints.cpp(31): RunWorkload(): loop iteration: i=1
2026-06-03 16:33:15:302   TracePoints.cpp(15): ProcessItem(): ProcessItem entered: value=1
2026-06-03 16:33:15:302   TracePoints.cpp(31): RunWorkload(): loop iteration: i=2
2026-06-03 16:33:15:302   TracePoints.cpp(15): ProcessItem(): ProcessItem entered: value=2
2026-06-03 16:33:15:302   TracePoints.cpp(31): RunWorkload(): loop iteration: i=3
2026-06-03 16:33:15:302   TracePoints.cpp(15): ProcessItem(): ProcessItem entered: value=3
2026-06-03 16:33:15:302 W TracePoints.cpp(19): ProcessItem(): rare branch: value=3
2026-06-03 16:33:15:302   TracePoints.cpp(31): RunWorkload(): loop iteration: i=4
2026-06-03 16:33:15:302   TracePoints.cpp(15): ProcessItem(): ProcessItem entered: value=4
2026-06-03 16:33:15:302   TracePoints.cpp(31): RunWorkload(): loop iteration: i=5
2026-06-03 16:33:15:302   TracePoints.cpp(15): ProcessItem(): ProcessItem entered: value=5
2026-06-03 16:33:15:302   PrintControlResult(): control> trace stat *:*:*
2026-06-03 16:33:15:302   PrintControlResult(): on  C:\Source\infra\logme\examples\TracePoints\TracePoints.cpp:ProcessItem:19 hits=4
on  C:\Source\infra\logme\examples\TracePoints\TracePoints.cpp:ProcessItem:15 hits=12
on  C:\Source\infra\logme\examples\TracePoints\TracePoints.cpp:RunWorkload:31 hits=12
on  C:\Source\infra\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