至此,已在 .d 文件中定义了探测器,接下来需要扩充源代码以指示应触发探测器的位置。以下面的 C 应用程序源代码为例:
void main_look(void) { ... query = wait_for_new_query(); process_query(query) ... }
要添加探测器位置,请添加对 <sys/sdt.h> 中定义的 DTRACE_PROBE() 宏的引用,如下例所示:
#include <sys/sdt.h> ... void main_look(void) { ... query = wait_for_new_query(); DTRACE_PROBE2(myserv, query__receive, query->clientname, query->msg); process_query(query) ... }
宏名称 DTRACE_PROBE2 中的后缀 2 表示将传递到探测器的参数个数。探测器宏的前两个参数是提供器名称和探测器名称,它们必须与 D 提供器和探测器定义对应。其余的宏参数是在触发探测器时将赋给 DTrace arg0..9 变量的参数。应用程序源代码可以包含对同一个提供器和探测器名称的多次引用。如果源代码中存在对同一个探测器的多次引用,则任何宏引用都将导致触发探测器。