1

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

我发现了几个打印指针的日志行,%p但我不知道如何将这些行“翻译”成 LTTng。

任何帮助将不胜感激。

4

1 回答 1

1

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

您应该可以使用%pwith,tracelog()因为它使用vsprintf()函数族来格式化录制的消息。

如果您已经踏上了定义静态跟踪点的道路,我建议您使用由 a 支持的 CTF 整数,uintptr_t如果您的编译器支持 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);
于 2015-11-20T16:28:00.077 回答