我们需要将大量现有的踪迹(类似 printf)改编为 LTTNG。我们预见的问题之一是,我们需要一个包含 args 和 char* 字符串格式的包罗万象的跟踪点。我们试图找到一种方法来避免在调用 LTTNG 跟踪点之前编写字符串。在将跟踪点传递给 LTTNG 库之前,是否有任何方法可以预先知道跟踪点是否“将被跟踪”?我们可以调用任何方法来了解跟踪是否匹配?
非常感谢!
PS 我们知道拥有这种跟踪点是一种不好的做法,但是无数的跟踪线在我们头顶上飞舞。
使用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);
}
注意:为此,您需要至少具有LTTng-UST 2.7.0-rc1
您可以通过liblttng-ctl从技术上查询跟踪会话的状态。但是,如果您的目标是提高性能,我不确定每次遇到跟踪点时都通过该库进行查找会比字符串格式化更有效。您必须对其进行基准测试。
附带说明一下,如果您要将现有printf()
调用移动到 LTTng 跟踪点,您可能需要查看tracef()
,它基本上是跟踪器已经定义的单格式字符串跟踪点。tracelog()
LTTng 2.7 中还将引入一个稍微高级的功能。