我可以在跟踪之前查询ltng是否要跟踪具有给定参数的给定跟踪点

Can I query LTTNG if a given tracepoint with given args is going to be traced, before tracing it?

本文关键字:跟踪 参数 是否 查询 我可以 ltng      更新时间:2023-10-16

我们需要将大量现有的迹线(类似于打印)调整为ltng。我们预见到的一个问题是,我们将需要一个带有args格式和char* string格式的捕获所有跟踪点。我们试图找到一种方法来避免在调用ltng跟踪点之前必须组合字符串。在将跟踪点传递给ltng库之前,是否有任何方法事先知道跟踪点"将被跟踪"?我们可以调用什么方法来知道跟踪是否匹配?

非常感谢!

注:我们知道拥有这种跟踪点是一种不好的做法,但是无数的跟踪线在我们头顶飞舞。

使用tracepoint_enabled()do_tracepoint()宏如下,代码从手册页复制:

if (tracepoint_enabled(ust_tests_hello, tptest)) {
    /* prepare arguments */
    do_tracepoint(ust_tests_hello, tptest, i, netint, values,
        text, strlen(text), dbl, flt);
}
注意:要使其工作,您需要至少有ltng - ust 2.7.0-rc1

技术上可以通过liblttng-ctl查询跟踪会话的状态。但是,如果您的目标是提高性能,我不确定每次遇到跟踪点时通过该库进行查找是否比字符串格式化更有效。你必须对它进行基准测试。

作为旁注,如果您正在将现有的printf()调用移动到ltng跟踪点,则可能需要查看tracef(),它基本上是跟踪程序已经定义的单一格式字符串跟踪点。还有一个稍微高级一点的tracelog()函数,将在ltng 2.7中引入。