【问题标题】:Can I query LTTNG if a given tracepoint with given args is going to be traced, before tracing it?如果要在跟踪之前跟踪具有给定参数的给定跟踪点,我可以查询 LTTNG 吗?
【发布时间】:2015-07-15 14:28:26
【问题描述】:

我们需要将大量现有跟踪(类似 printf)改编为 LTTNG。我们预见到的问题之一是,我们需要一个包含 args 和 char* 字符串格式的包罗万象的跟踪点。我们试图找到一种方法来避免在调用 LTTNG 跟踪点之前编写字符串。在将跟踪点传递给 LTTNG 库之前,是否有任何方法可以预先知道跟踪点是否“将被跟踪”?我们可以调用任何方法来了解跟踪是否匹配?

非常感谢!

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

【问题讨论】:

    标签: c++ c lttng


    【解决方案1】:

    使用tracepoint_enabled()do_tracepoint()宏如下,代码从man page复制:

    if (tracepoint_enabled(ust_tests_hello, tptest)) {
        /* prepare arguments */
        do_tracepoint(ust_tests_hello, tptest, i, netint, values,
            text, strlen(text), dbl, flt);
    }
    

    注意:为此,您至少需要拥有LTTng-UST 2.7.0-rc1

    【讨论】:

      【解决方案2】:

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

      附带说明,如果您要将现有的 printf() 调用移动到 LTTng 跟踪点,您可能需要查看 tracef(),它基本上是跟踪器已经定义的单格式字符串跟踪点。还有一个更高级的tracelog() 函数,将在 LTTng 2.7 中引入。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多