minitrace使用

minitrace使用

简介

minitrace 是一个轻量级的跟踪库,用于创建和记录程序的运行时跟踪,以便进行性能分析。 在C++程序中插入性能监控点,通过记录函数或任务的开始和结束时间,生成trace.json文件。 minitrace生成的trace.json文件可以通过ChromeTrace Viewer(内置于Chrome浏览器中的工具)进行可视化。

获取

  • github上面的是基于C语言实现的,地址为:https://github.com/hrydgard/minitrace.git
  • 可以在行为树的仓库中找到c++版本的,地址:https://github.com/BehaviorTree/BehaviorTree.CPP.git
    • 3rdparty/minitrace

用法

  • 参照README.md

结果查看

  • 打开Chrome浏览器,并输入chrome://tracing进入Trace Viewer界面
  • 加载(load)trace.json文件
  • 查看和分析数据:加载成功后,可以在界面看到各线程的运行时间等性能数据

例程解析

#include <unistd.h>
#include <iostream>
#include "minitrace/minitrace.h"

using namespace minitrace;

int main(int argc, const char *argv[]) 
{
  int i;
  // 初始化 minitrace 库,并指定输出跟踪数据的文件路径
  mtr_init("trace.json");

  // 设置进程和线程的名称,这些信息会在跟踪数据中显示
  MTR_META_PROCESS_NAME("minitrace_test");
  MTR_META_THREAD_NAME("main thread");

  int long_running_thing_1;
  int long_running_thing_2;

  // 定义两个整数变量,用于跟踪两个长时间运行的任务。MTR_START 宏用于标记任务的开始
  MTR_START("background", "long_running", &long_running_thing_1);
  MTR_START("background", "long_running", &long_running_thing_2);

  // 使用 MTR_BEGIN 宏开始跟踪名为 "outer" 的事件,并使程序暂停 80 毫秒
  MTR_BEGIN("main", "outer");
  usleep(80000);
   
  // 循环三次,每次开始一个名为 "inner" 的事件,暂停 40 毫秒,然后结束该事件,再暂停 10 毫秒
  for (i = 0; i < 3; i++) {
    MTR_BEGIN("main", "inner");
    usleep(40000);
    MTR_END("main", "inner");
    usleep(10000);
  }
    
  // 记录第一个后台任务的中间步骤,并再次暂停 80 毫秒
  MTR_STEP("background", "long_running", &long_running_thing_1, "middle step");
  usleep(80000);
    
  // 结束 "outer" 事件的跟踪
  MTR_END("main", "outer");

  usleep(50000);
    
  // 记录一个名为 "the end" 的即时事件
  MTR_INSTANT("main", "the end");
  usleep(10000);
    
  // 结束两个后台任务的跟踪
  MTR_FINISH("background", "long_running", &long_running_thing_1);
  MTR_FINISH("background", "long_running", &long_running_thing_2);

  // 刷新跟踪数据到文件,并关闭 minitrace 库
  mtr_flush();
  mtr_shutdown();
  return 0;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值