如何用lttng记录内存地址?

时间:2015-11-20 08:44:10

标签: lttng

我必须将一些代码迁移到LTTng。我们使用类似syslog的工具并使用类似printf的格式......

我发现有几个日志行打印指针%p,但我不知道如何将这些行“转换”为LTTng。

任何帮助都将非常感激。

1 个答案:

答案 0 :(得分:1)

如果您使用的是LTTng 2.7+,最好的办法是使用tracelog(),这是一种特殊的API,旨在简化从记录迁移到跟踪的过程。

您应该可以将%ptracelog()一起使用,因为它使用vsprintf()系列函数来格式化录制的消息。

如果您已经踏上定义静态跟踪点的路径,我建议使用由uintptr_t支持的CTF整数,如果您的编译器支持C99,否则unsigned long long或者size_t(其中应该能够在大多数时间保留一个地址,虽然不能保证):

#include <stdint.h>

TRACEPOINT_EVENT(
    my_provider,
    my_memory_address,

    /* arguments (input) */
    TP_ARGS(
        const void *, address
    ),

    /* event fields (output)  */
    TP_FIELDS(
        ctf_integer_hex(uintptr_t, address, address)
    )
)

然后你可以像这样使用它:

tracepoint(my_provider, my_memory_address, my_pointer);