guile-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: guile-debugging: how to access source properties from trap context


From: Neil Jerram
Subject: Re: guile-debugging: how to access source properties from trap context
Date: Mon, 02 Jan 2006 00:18:09 +0000
User-agent: Gnus/5.1007 (Gnus v5.10.7) Emacs/21.4 (gnu/linux)

Holger Blasum <address@hidden> writes:

> Hello guile-user,

Hi Holger,

> in the "Guile Debugging Enhancements" tutorial 
> (http://download.gna.org/guile-debugging/guile-debugging.html)
> there is encouragement to play with the source trap context
> parameters. 

It's not important for the rest of my reply, but can you indicate
exactly where in the doc you are referring to, so I can review whether
this encouragement is worded as well as it could be?

> What I want to look at are the source file names and 
> line numbers like eg in any gdb stepping session of a C program
> say for matrix multiplication like: 
>
> gdb -f a.out
> (gdb) br main
> Breakpoint 1 at 0x8048417: file matrix.c, line 11.
> (gdb) run
> Starting program: /home/blasum/a/comp/sema/sample/c/samples/a.out 
> /home/blasum/a/comp/sema/sample/c/samples/matrix.c:12
> (gdb) step
> /home/blasum/a/comp/sema/sample/c/samples/matrix.c:13
> (gdb) step
> /home/blasum/a/comp/sema/sample/c/samples/matrix.c:14
> (gdb) step
> ...
>
> How can one access file name and line number of the source
> properties in guile-debugging?

In theory, the trace/source procedure exported from (ossau trace)
should give you this.

Here's an example which works up to a point for me:

  (use-modules (ice-9 debugger) (ossau 
        ice-9-debugger-extensions) (ossau traps) (ossau trace))
  (load "matrix.scm")
  (define (report-exp trap-context)
      (display "Expression: ")
      (display (trace/source trap-context))
      (newline))
  (install-trap (make <procedure-trap> #:procedure mkmatrix
  #:behaviour (list report-exp)))

  (do-main 4)

which prints:

  Expression: matrix.scm:6:2

Note, though, that my dummy matrix.scm looks like this ...

(define (mkmatrix)
  (let ((x 1))
    'this-is-a-matric))

(define (do-main n)
  (mkmatrix))

... so 6:2 is the location of the call to mkmatrix, not of mkmatrix's
own code.  Is that what you wanted?

I suspect not, because it doesn't map onto the GDB example that you
gave.  It sounds like what you might in fact want is a report of the
evaluation of each subexpression within mkmatrix.  In that case, the
correct incantation would be something like this:

  (use-modules (ice-9 debugger) (ossau 
        ice-9-debugger-extensions) (ossau traps) (ossau trace) (ossau steps))
  (load "matrix.scm")

  (define (report-exp trap-context)
      (display "Expression: ")
      (display (trace/source trap-context))
      (newline))

  (define (report-subexps trap-context)
    (let ((step-trap (make <step-trap>
                   #:file-name (frame-file-name (tc:frame trap-context))
                   #:behaviour report-exp)))
      (install-trap step-trap)
      (at-exit (tc:depth trap-context)
             (lambda (trap-context)
               (uninstall-trap step-trap)))))

  (install-trap (make <procedure-trap> #:procedure mkmatrix
  #:behaviour (list report-subexps)))

For my dummy matrix.scm, this prints:

  Expression: matrix.scm:2:2
  Expression: matrix.scm:3:20
  Expression: matrix.scm:3:20

Does this help at all?  (I suspect not completely, so please write
more!)

        Neil






reply via email to

[Prev in Thread] Current Thread [Next in Thread]