[gambit-list] limiting trace

lowly coder lowlycoder at huoyanjinjing.com
Fri Feb 20 23:44:19 EST 2009


So I'm looking more in lib/_repl.scm, in particular at:

(define-prim (##interp-procedure-default-entry-hook
proc)
  (let ((hook (##interp-procedure-entry-hook
proc)))
    (if (and
hook
             (##closure?
hook)
             (##eq? (##subprocedure-parent (##closure-code
hook))

##make-default-entry-hook))

hook

      #f)))


and I'm wondering two things:

1) in trace, where is the pp / display / write

2) after the proc is setup by ##interp-procedure-default-entry-hook, where
in the interpreter is proc called?

On Fri, Feb 20, 2009 at 8:31 PM, lowly coder
<lowlycoder at huoyanjinjing.com>wrote:

> hmm, this is in lib/_repl.scm
>
> and I see:
>
>
> (define-prim (##trace
> proc)
>
>
>   (define (setup
> hook)
>     (let ((settings (##closure-ref hook
> 1)))
>       (##vector-set! settings 1
> #t)
>       (if (##not (##memq proc
> ##trace-list))
>         (set! ##trace-list (##cons proc
> ##trace-list)))))
>
>
>   (let ((hook (##interp-procedure-default-entry-hook
> proc)))
>     (if
> hook
>
>       (setup
> hook)
>       (let ((new-hook
> (##make-default-entry-hook)))
>         (##interp-procedure-entry-hook-set! proc
> new-hook)
>         (setup new-hook)))))
>
>
> is "##interp-procedure-entry-hook-set!" a function that gets called
> whenever a function gets hit with 'eval' ?
>
>
>
> On Fri, Feb 20, 2009 at 8:21 PM, lowly coder <lowlycoder at huoyanjinjing.com
> > wrote:
>
>> Okay, so I almost think I have a solution to this.
>>
>> Can I have something like "trace", where instead of printing the argument
>> line, it passes it to a function?
>>
>> Like a function uber-trace
>>
>> where:
>>
>> (trace foo) = (uber-trace foo (lambda (args) (pp args)))
>>
>>
>>
>>
>> On Fri, Feb 20, 2009 at 8:04 PM, lowly coder <
>> lowlycoder at huoyanjinjing.com> wrote:
>>
>>> Code:
>>>
>>> ~/code/irc$ cat trace.scm
>>> (define (foo x) x)
>>>
>>> (define (bar) (foo 0))
>>>
>>> (define (test)
>>>   (foo 1)
>>>   (bar))
>>>
>>> (trace foo)
>>>
>>> (test)
>>> ~/code/irc$ gsi trace.scm
>>> | > (foo 1)
>>> | 1
>>> | > (foo 0)
>>> | 0
>>>
>>>
>>> Problem:
>>>
>>> Can I control trace where I can say "trace foo, but not when it's called
>>> by bar".
>>>
>>> I.e. rather than just saying "trace this function", I would like to be
>>> able to say:
>>>
>>>
>>> (trace foo predicate)
>>>
>>> where predicate is a function that takes as input the "stack" frame, and
>>> as output creates a #t / #f, which decides whether this particular trace
>>> should be printed
>>>
>>>
>>>
>>> On a side note -- all the cool debugging functions in Gambit -- is this
>>> part of the 100K LOC scheme or 50K LOC hand written C? (hoping it's the
>>> former)
>>>
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.iro.umontreal.ca/pipermail/gambit-list/attachments/20090220/d74972ae/attachment.htm>


More information about the Gambit-list mailing list