我必须将一些代码迁移到 LTTng。我们使用类似 syslog 的工具并使用类似 printf 的格式......
我发现了几个打印指针的日志行,%p
但我不知道如何将这些行“翻译”成 LTTng。
任何帮助将不胜感激。
我必须将一些代码迁移到 LTTng。我们使用类似 syslog 的工具并使用类似 printf 的格式......
我发现了几个打印指针的日志行,%p
但我不知道如何将这些行“翻译”成 LTTng。
任何帮助将不胜感激。
如果您使用的是 LTTng 2.7+,最好的办法是使用tracelog()
,这是一种特殊的 API,旨在简化从日志记录到跟踪的迁移。
您应该可以使用%p
with,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);