On 10/30/2014 07:47 PM, Nan Xiao via dtrace-discuss wrote: > Hi all, > > > There are two argument types in DTrace: "arg0...arg9" vs "args[]". > According to Brendan's book, the definitions of two argument types are like > this: > > Variable Name Type Description > arg0...arg9 uint64_t Probe arguments; content is > provider-specific > args[] * Typed probe arguments; content is > provider-specific > > My question is how to decide use "arg0...arg9" or "args[]"? Per my > understanding, I can use "dtrace -lvn probe" to check. > > For example: > bash-3.2# dtrace -lvn syscall::read:entry > ID PROVIDER MODULE FUNCTION NAME > 58077 syscall read > entry > > > ...... > > > Argument Types > None > > > Since "Argument Types are None", I should use "arg0...arg9". > > > > bash-3.2# dtrace -lvn proc:::signal-handle > ID PROVIDER MODULE FUNCTION NAME > 1163 proc genunix psig > signal-handle > > > ...... > > > Argument Types > args[0]: int > args[1]: siginfo_t * > args[2]: int (*)() > > > Since "Argument Types are not None", I should use "args[]". > > > > Is this method right? Thanks very much in advance!
Which you'll want to use depends on the situation. The types of arg0 and args[0] will be different and the latter may not always exist. arg0 and friends are generally always defined as an int64_t (if you consider pid, syscall, and fbt for a moment). If we have ctf data, then the type of args[%d] will be the type of that data. Consider the case where you use the print() action. print(arg0) will always print an int64_t, where as print(args[0]) will print the data based on the type information that we have. Does that help clarify things? Robert ------------------------------------------- dtrace-discuss Archives: https://www.listbox.com/member/archive/184261/=now RSS Feed: https://www.listbox.com/member/archive/rss/184261/25769126-e243886f Modify Your Subscription: https://www.listbox.com/member/?member_id=25769126&id_secret=25769126-8d47a7b2 Powered by Listbox: http://www.listbox.com