> The comments at the top of sys/vtrace.h explains the background, but > doesn't state in detail how to use it. In particular, what the type > and the format of the arguments are. > > For example, to monitor this (in uts/common/inet/ip/ip.c) > TRACE_1(TR_FAC_IP, TR_IP_RPUT_START, "ip_input_start: q %p", q);
The digit given in the TRACE_?() macros specify how many arguments are being provided, so with TRACE_1() there is 1 argument. Unfortunately, the vtrace probes don't have their argument type information exported so you can't use the args[] array to access them or the '-v' flag to dtrace(1M). In this case you need to use the source to look at the arguments and then either use the source or mdb(1) to look at the types. Then you cast the arguments accordingly. So, with your example of vtrace:ip:ip_input:TR_IP_RPUT_START, this takes a single argument of a queue_t pointer as you state. To use this just do something like: vtrace:ip:ip_input:TR_IP_RPUT_START { this->queue = (queue_t *)arg0; printf("High Water = %d\n", this->queue->q_hiwat); } As I said, to find the definition of a queue_t, either use the source or mdb: # mdb -k Loading modules: [ unix genunix dtrace specfs ufs scsi_vhci sd isp pcisch sgsbbc ip hook neti sctp arp fctl nca lofs zfs random ipc sppp cpc ptm nfs fcip logindmux ] > ::print -t queue_t { struct qinit *q_qinfo struct msgb *q_first struct msgb *q_last struct queue *q_next struct queue *q_link <chop> Hope this helps. Jon. _______________________________________________ dtrace-discuss mailing list dtrace-discuss@opensolaris.org