Hey Darren, There is a stackdepth builtin variable that holds the depth of the stack. You can use that to find how deep you are instead of using your own depth variable.
Also I'm not sure your script does what you think it does. You need predicates that use the self->trace variable. Here is my rewrite with stackdepth. fbt::somefunc:entry { self->trace=1; self->funcdepth = stackdepth; } fbt::somefunc:return { self->trace=0; } fbt:::return /self->trace && (stackdepth - self->funcdepth) < 4/ { printf("%lx",arg1); } I just typed this script in email and have not tested it. So please use with care :-) BTW the stackdepth equivalent in the userland is ustackdepth. -Angelo On Apr 6, 2011, at 9:48 AM, Darren Reed wrote: > If I use a simple dtrace script such as this: > > fbt::somefunc:entry{self->trace=1;} > fbt::somefunc:return{self->trace=0;} > fbt:::entry{} > fbt:::return{printf("%lx", arg1);} > > then it will descend to whatever depth is necessary > > If I want to limit it to say 3 functions deep, how can I do that? > > The quick answer I want to use is to do "self->depth++" on each entry and > then use /self->depth < 4/... > but the problem is then handling return and decrementing depth properly. > > Is there something that I'm missing? > > Darren > > _______________________________________________ > dtrace-discuss mailing list > dtrace-discuss@opensolaris.org _______________________________________________ dtrace-discuss mailing list dtrace-discuss@opensolaris.org