Solaris 动态跟踪指南

向应用程序代码中添加探测器

至此,已在 .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 变量的参数。应用程序源代码可以包含对同一个提供器和探测器名称的多次引用。如果源代码中存在对同一个探测器的多次引用,则任何宏引用都将导致触发探测器。