我必须将一些代码迁移到LTTng。我们使用类似syslog的工具并使用类似printf的格式......
我发现有几个日志行打印指针%p
,但我不知道如何将这些行“转换”为LTTng。
任何帮助都将非常感激。
答案 0 :(得分:1)
如果您使用的是LTTng 2.7+,最好的办法是使用tracelog()
,这是一种特殊的API,旨在简化从记录迁移到跟踪的过程。
您应该可以将%p
与tracelog()
一起使用,因为它使用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);