运行测试

在Linux用LTTNG运行[LTTng学习之旅]——在用户程序中简单的添加一个trace点_应用内加trace点-CSDN博客
模板代码遇到报错:

error: expected ‘)’ before ‘(’ token
   25 |     LTTNG_UST_TP_ARGS(
      |                      ^
      |                      )

版本:lttng (LTTng Trace Control) 2.11.2 这个问题由于版本引起的,不同版本接口有点不一样(主要是新的版本宏添加了_UST_, tracelogging的库中已经解决了这个问题,会去判断LTTng的版本)。这个版本的示例文档 v2.11— LTTng

gcc -c -I. tp.c
gcc -c app.c
gcc -o app tp.o app.o -llttng-ust -ldl

lttng create my-session
# lttng enable-event --userspace 'my_provider:*'
lttng enable-event --userspace my_provider:simple_event
lttng enable-event --userspace my_provider:event_instance2
lttng start

./app 2 hello word

lttng stop
lttng view

lttng destroy

输出:

Trace directory: /home/lttng-traces/my-session-20250108-150438

[15:05:51.610552470] (+?.?????????) PowerEdge-R750 my_provider:simple_event: { cpu_id = 64 }, { argc = "./app", argv = 3 }
[15:05:51.610574909] (+0.000022439) PowerEdge-R750 my_provider:event_instance2: { cpu_id = 64 }, { a = 17, b = 15, c = "[other string]" }

编译运行TraceLogging for LTTng:

mkdir build
cd build
cmake ..
make
sudo make install

make test
./LTTngTest

测试过程:

lttng create
lttng enable-event -u TestProviderC:*
lttng enable-event -u TestProviderCpp:*
lttng start
./test/LTTngTest 
lttng stop
lttng view

部分结果:

Trace directory: /home/lttng-traces/auto-20250108-173818

[17:39:53.166062858] (+?.?????????) xmu-PowerEdge-R750 TestProviderC:Event1;k;: { cpu_id = 22 }, { __ms_ActivityId_length = 0, _ms_ActivityId = [ ] }
[17:39:53.166065190] (+0.000002332) xmu-PowerEdge-R750 TestProviderC:Event2;k0;k1;: { cpu_id = 22 }, { __ms_ActivityId_length = 0, _ms_ActivityId = [ ] }
[17:39:53.166065870] (+0.000000680) xmu-PowerEdge-R750 TestProviderC:CScalars1;k;: { cpu_id = 22 }, { __ms_ActivityId_length = 0, _ms_ActivityId = [ ] }
[17:39:53.166066160] (+0.000000290) xmu-PowerEdge-R750 TestProviderC:CScalars2;k0;k2;: { cpu_id = 22 }, { __ms_ActivityId_length = 0, _ms_ActivityId = [ ], _ms_Opcode = 0x2 }
[17:39:53.166066604] (+0.000000444) xmu-PowerEdge-R750 TestProviderC:CScalars3;k0;k2;k7;: { cpu_id = 22 }, { __ms_ActivityId_length = 0, _ms_ActivityId = [ ], _ms_Opcode = 0x3, _ms_Channel = 11, _ms_EventTag = 0x1234, 1 = 1 }
[17:39:53.166070367] (+0.000003763) xmu-PowerEdge-R750 TestProviderC:ThreadActivity0;k;: { cpu_id = 22 }, { __ms_ActivityId_length = 0, _ms_ActivityId = [ ] }
[17:39:53.166070719] (+0.000000352) xmu-PowerEdge-R750 TestProviderC:ThreadActivity1;k;: { cpu_id = 22 }, { __ms_ActivityId_length = 16, _ms_ActivityId = [ [0] = 0x1, [1] = 0x2, [2] = 0x3, [3] = 0x4, [4] = 0x5, [5] = 0x6, [6] = 0x7, [7] = 0x8, [8] = 0x1, [9] = 0x2, [10] = 0x3, [11] = 0x4, [12] = 0x5, [13] = 0x6, [14] = 0x7, [15] = 0x8 ] }
[17:39:53.166071219] (+0.000000500) xmu-PowerEdge-R750 TestProviderC:ThreadActivity2;k;: { cpu_id = 22 }, { __ms_ActivityId_length = 0, _ms_ActivityId = [ ] }
[17:39:53.166071550] (+0.000000331) xmu-PowerEdge-R750 TestProviderC:Transfer00;k;: { cpu_id = 22 }, { __ms_ActivityId_length = 0, _ms_ActivityId = [ ], __ms_RelatedActivityId_length = 0, _ms_RelatedActivityId = [ ] }
[17:39:53.166071887] (+0.000000337) xmu-PowerEdge-R750 
[17:39:53.166073283] (+0.000000353) xmu-PowerEdge-R750 TestProviderC:TransferOO;k;: { cpu_id = 22 }, { __ms_ActivityId_length = 16, _ms_ActivityId = [ [0] = 0x0, [1] = 0x0, [2] = 0x0, [3] = 0x0, [4] = 0x0, [5] = 0x0, [6] = 0x0, [7] = 0x0, [8] = 0x0, [9] = 0x0, [10] = 0x0, [11] = 0x0, [12] = 0x0, [13] = 0x0, [14] = 0x0, [15] = 0x0 ], __ms_RelatedActivityId_length = 16, _ms_RelatedActivityId = [ [0] = 0x0, [1] = 0x0, [2] = 0x0, [3] = 0x0, [4] = 0x0, [5] = 0x0, [6] = 0x0, [7] = 0x0, [8] = 0x0, [9] = 0x0, [10] = 0x0, [11] = 0x0, [12] = 0x0, [13] = 0x0, [14] = 0x0, [15] = 0x0 ] }
[17:39:53.166073585] (+0.000000302) xmu-PowerEdge-R750 TestProviderC:i8;k;: { cpu_id = 22 }, { __ms_ActivityId_length = 0, _ms_ActivityId = [ ], i8 = 100 }
[17:39:53.166073875] (+0.000000290) xmu-PowerEdge-R750 TestProviderC:u8;k;: { cpu_id = 22 }, { __ms_ActivityId_length = 0, _ms_ActivityId = [ ], u8 = 200 }
[17:39:53.166074593] (+0.000000718) xmu-PowerEdge-R750 TestProviderC:i16;k;: { cpu_id = 22 }, { __ms_ActivityId_length = 0, _ms_ActivityId = [ ], i16 = 30000 }
[17:39:53.166074923] (+0.000000330) xmu-PowerEdge-R750 TestProviderC:u16;k;: { cpu_id = 22 }, { __ms_ActivityId_length = 0, _ms_ActivityId = [ ], u16 = 60000 }

使用方法

// 简单一点的例子
LTTNG_UST_TRACEPOINT_EVENT( // 这个宏用于定义了一个跟踪点事件
    hello_world, // 事件的提供者名
    my_first_tracepoint, // 跟踪事件的名称
    LTTNG_UST_TP_ARGS( // 定义了跟踪点的参数,这里有两个参数
        int, my_integer_arg,
        char *, my_string_arg
    ),
    LTTNG_UST_TP_FIELDS( // 实际要在事件中跟踪写log的数据字段
        lttng_ust_field_string(my_string_field, my_string_arg),
        lttng_ust_field_integer(int, my_integer_field, my_integer_arg)
    )
)   
// 使用
#include <stdio.h>
#include "hello-tp.h"

int main(int argc, char *argv[])
{
    unsigned int i;

    puts("Hello, World!\nPress Enter to continue...");
    getchar();

    /*
     * An lttng_ust_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
     * C identifiers, NOT strings: they're in fact parts of variables
     * that the macros in `hello-tp.h` create.
     */
    lttng_ust_tracepoint(hello_world, my_first_tracepoint, 23,
                         "hi there!");

    for (i = 0; i < argc; i++) {
        lttng_ust_tracepoint(hello_world, my_first_tracepoint,
                             i, argv[i]);
    }

    puts("Quitting now!");
    lttng_ust_tracepoint(hello_world, my_first_tracepoint,
                         i * i, "i^2");
    return 0;
}

框架组成

  • 创建并编译了两个库 lttngh(核心库)和 tracelogging(接口库)。
  • LTTng::UST:该库是 LTTng 用户空间跟踪库的接口目标,它是 lttngh 库的公开依赖。
  • lttng-ust-tracepoint::lttng-ust-tracepoint:该库是 lttng-ust-tracepoint 的别名目标,它是 lttngh 库的私有依赖。

文章作者: 易百分
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 易百分 !
  目录