snicoud@ATC.BOEING.COM (Stephen Nicoud) (02/21/90)
Date: Sun, 4 Feb 90 17:16:19 EST
From: fsr@bubba.att.com
Subject: tracing all accesses to an instance
oh flavor gurus,
i have a question.
yesterday i created a flavor and began using it in my application.
the 8 or so methods that i wrote for it defined the interface
to the rest of my "world". but then i began using it, and things didn't
work right, and because i couldn't be sure the rest of my "world"
was making calls to my instance in the proper order, and with the
proper arguments, i set about trying to "trace" all accesses to it.
unfortunately the function TRACE expects some kind of valid function
object...fair enough. then i remembered that the function APPLY and
hence FUNCALL allow flavor instances to be used in place of other
valid function objects. so it tried
(eval `(trace ,*instance*))
but to no eval.
i still assume this can be accomplished somehow. can anybody help?
thanks,
frank
Hmm, if you want to trace each access to only a particular instance, an
"obvious" solution doesn't immediately come to mind.
I suppose that, in general, you might be able to trace all method calls
of a flavor "class" by setting up a loop to trace each method. You
know, something like,
(loop for method in (send (make-instance 'your-flavor) :which-operations)
do (eval `(trace (:function (:method your-flavor ,method)))))
I don't know, maybe you can set up a conditional for a particular
instance like,
(loop for method in (send your-instance :which-operations)
do (eval `(trace (:function (:method your-instance ,method) :cond (eq (car arglist) your-instance)))))
I haven't tried these code bits, so there's probably something
"obviously" wrong with them. :-) Maybe someone else with more time on
their hands than me can tell us if these are even reasonable.
Anyway, it might give you a couple of ideas on ways to try.
Good Luck and let us know what you come up with,
Steve