zoukankan      html  css  js  c++  java
  • c 语言使用lttng

    以下内容来自lttng 官方文档,主要是学习记录

    创建tracepoint

    • hello-tp.h
    #undef TRACEPOINT_PROVIDER
    #define TRACEPOINT_PROVIDER hello_world
    #undef TRACEPOINT_INCLUDE
    #define TRACEPOINT_INCLUDE "./hello-tp.h"
    #if !defined(_HELLO_TP_H) || defined(TRACEPOINT_HEADER_MULTI_READ)
    #define _HELLO_TP_H
    #include <lttng/tracepoint.h>
    TRACEPOINT_EVENT(
        hello_world,
        my_first_tracepoint,
        TP_ARGS(
            int, my_integer_arg,
            char*, my_string_arg
        ),
        TP_FIELDS(
            ctf_string(my_string_field, my_string_arg)
            ctf_integer(int, my_integer_field, my_integer_arg)
        )
    )
    #endif /* _HELLO_TP_H */
    #include <lttng/tracepoint-event.h>
     
    • hello-tp.c
    #define TRACEPOINT_CREATE_PROBES
    #define TRACEPOINT_DEFINE
    #include "hello-tp.h"
    • 构建
    gcc -c -I. hello-tp.c
    • c 应用
      hello.c
    #include <stdio.h>
    #include "hello-tp.h"
    int main(int argc, char *argv[])
    {
        int x;
        puts("Hello, World!
    Press Enter to continue...");
        /*
         * The following getchar() call is only placed here for the purpose
         * of this demonstration, to pause the application in order for
         * you to have time to list its tracepoints. It's not needed
         * otherwise.
         */
        getchar();
        /*
         * A tracepoint() call.
         *
         * Arguments, as defined in hello-tp.h:
         *
         * 1. Tracepoint provider name   (required)
         * 2. Tracepoint name            (required)
         * 3. my_integer_arg             (first user-defined argument)
         * 4. my_string_arg              (second user-defined argument)
         *
         * Notice the tracepoint provider and tracepoint names are
         * NOT strings: they are in fact parts of variables that the
         * macros in hello-tp.h create.
         */
        tracepoint(hello_world, my_first_tracepoint, 23, "hi there!");
        for (x = 0; x < argc; ++x) {
            tracepoint(hello_world, my_first_tracepoint, x, argv[x]);
        }
        puts("Quitting now!");
        tracepoint(hello_world, my_first_tracepoint, x * x, "x^2");
        return 0;
    }
     
    • 构建
    gcc -c hello.c 
    • 链接应用
    gcc -o hello hello.o hello-tp.o -llttng-ust -ldl
    • 构建流程

    追踪应用

    • 启动应用
    ./hello world and beyond
    • 启动 session daemon
    lttng-sessiond --daemonize
    • 查看tracepoint
    lttng list --userspace
    • 创建会话
    lttng create my-user-space-session
    • 创建event规则
    lttng enable-event --userspace hello_world:my_first_tracepoint
    • 启动
    lttng start
    • 操作
      输入enter,停止应用
    • 停止追踪
     
    lttng destroy
    • 查看
    babeltrace ~/lttng-traces/my-user-space-session*
    • 效果

    说明

    对于构建我们需要安装devel包,这个通过efficios提供的yum包就包含了

    参考资料

    https://lttng.org/docs/v2.12/#doc-tracing-your-own-user-application

  • 相关阅读:
    持续集成 自动化构建、测试、部署您的Coding代码
    MySQL主从 常见的错误及解决方案
    老王带你走过 Kafka 入门教程
    Spring Cloud Eureka 常用配置及说明
    关于智慧大数据中心平台建设思路
    工作经验是积累总结出来的
    程序员晋级CTO之路的8大准则
    Spring Cloud Feign 使用方法与性能优化
    Elasticsearch(ES)API 增删查改常用操作
    ELK 日志采集 实战教程
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/12905940.html
Copyright © 2011-2022 走看看