[Top][All Lists]
[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