我们需要为LTTNG调整大量类似printf的现有迹线。我们预见到的一个问题是我们需要一个带有args格式和char *字符串的全能跟踪点。我们试图找到一种方法来避免在调用LTTNG跟踪点之前编写字符串。是否有任何方法可以事先知道跟踪点是否“将被跟踪”,然后再将其传递给LTTNG库?我们可以调用任何方法来了解跟踪是否匹配?
非常感谢!
P.S。我们知道拥有这种跟踪点是一种不好的做法,但是数以万计的跟踪线正在我们之上飞行。
答案 0 :(得分: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
答案 1 :(得分:0)
您可以通过liblttng-ctl从技术上查询跟踪会话的状态。但是,如果您的目标是提高性能,我不确定每次点击跟踪点时通过此库进行查找将比字符串格式更有效。你必须对它进行基准测试。
作为旁注,如果要将现有的printf()
调用移动到LTTng跟踪点,您可能需要查看tracef()
,它基本上是由跟踪器定义的单格式字符串跟踪点。还有一个稍高级的tracelog()
函数将在LTTng 2.7中引入。