[gambit-list] How to configure Gambit with maximum debugging?
Marc Feeley
feeley at iro.umontreal.ca
Sun Sep 29 08:13:54 EDT 2013
Try:
(declare (not optimize-dead-local-variables))
This will ruin the "safety for space", but will greatly improve debugging. It won't get rid of variables that are no longer necessary by the program logic.
Marc
On 2013-09-28, at 9:33 PM, Bradley Lucier <lucier at math.purdue.edu> wrote:
> I should know this.
>
> I want to configure and build gambit with maximum,maximum,maximum
> debugging info.
>
> For example, when I add
>
> -track-scheme -debug -debug-location -debug-source -debug-environments
>
> to the gsc-boot line for converting .scm to .c files in lib/makefile,
> and I hit an error called on the routine at the bottom, I see
>
> 1> ,y
> 0 naive-div "lib/_num.scm"@9184.3
> (apply error 'crap2 (map unveil-bignum (list normalizing-bit...
> 1> ,e
> n == 2
> normalizing-bit-shift == 5
> u2 == 2097152
> v2 == 3200000000
>
> but there are also other variables---u, v, iota, etc.---that are in the
> routine and don't show up in the environment.
>
> Is it possible to get these?
>
> I'm trying to debug a problem where ... well, you might not believe me,
> but it seems to be nasty.
>
> Brad
>
>
> #<procedure #2 naive-div> =
> (##lambda
> (u v)
> (define (iota n) (if (##fx= n 0) '() (cons (fx- n 1) (iota (fx- n 1)))))
> (or (and (##bignum? u) (##bignum? v)) (error 'crap u v))
> '(pp 'naive-div-orig)
> '(pp (cons '##bignum.mdigit-length (map ##bignum.mdigit-length (list u
> v))))
> '(pp (cons '##bignum.adigit-length (map ##bignum.adigit-length (list u
> v))))
> '(pp (map unveil-bignum (list u v)))
> (let ((n (let loop1 ((i (##fixnum.- (##bignum.mdigit-length v) 1)))
> (if (##fixnum.< 0 (##bignum.mdigit-ref v i)) (##fixnum.+ i 1) (loop1
> (##fixnum.- i 1))))))
> (let ((normalizing-bit-shift (##fixnum.- ##bignum.mdigit-width
> (##integer-length (##bignum.mdigit-ref v (##fixnum.- n 1))))))
> (let ((u2 (##bignum.arithmetic-shift u normalizing-bit-shift)) (v2
> (##bignum.arithmetic-shift v normalizing-bit-shift)))
> (or (and (##bignum? u2) (##bignum? v2)) (let () '(pp '(list
> normalizing-bit-shift u v u2 v2)) (apply error 'crap2 (map unveil-bignum
> (list normalizing-bit-shift u v u2 v2)))))
> (let* ((u u2)
> (v v2)
> (q (##bignum.make (##fixnum.+ (##fixnum.-
> (##bignum.adigit-length u) (##bignum.adigit-length v)) 2) #f #f))
> (v_n-1 (##bignum.mdigit-ref v (##fixnum.- n 1)))
> (v_n-2 (##bignum.mdigit-ref v (##fixnum.- n 2))))
> (let ((m (let loop2 ((i (##fixnum.- (##bignum.mdigit-length u)
> 1)))
> (let ((u_i (##bignum.mdigit-ref u i)))
> (if (##fixnum.< 0 u_i) (if (##not (##fixnum.< u_i
> v_n-1)) (##fixnum.- (##fixnum.+ i 1) n) (##fixnum.- i n)) (loop2
> (##fixnum.- i 1)))))))
> (let loop3 ((j m))
> (if (##not (##fixnum.< j 0))
> (let ((q-hat (let ((q-hat (##bignum.mdigit-quotient u
> (##fixnum.+ j n) v_n-1)) (u_n+j-2 (##bignum.mdigit-ref u (##fixnum.+
> (##fixnum.- j 2) n))))
> (let ((r-hat (##bignum.mdigit-remainder
> u (##fixnum.+ j n) v_n-1 q-hat)))
> (if (or (##fixnum.= q-hat
> ##bignum.mdigit-base) (##bignum.mdigit-test? q-hat v_n-2 r-hat u_n+j-2))
> (let ((q-hat (##fixnum.- q-hat
> 1)) (r-hat (##fixnum.+ r-hat v_n-1)))
> (if (and (##fixnum.< r-hat
> ##bignum.mdigit-base)
> (or (##fixnum.= q-hat
> ##bignum.mdigit-base) (##bignum.mdigit-test? q-hat v_n-2 r-hat u_n+j-2)))
> (##fixnum.- q-hat 1)
> q-hat))
> q-hat)))))
> (##declare (not interrupts-enabled))
> (let loop4 ((i j) (k 0) (borrow 0))
> (if (##fixnum.< k n)
> (loop4 (##fixnum.+ i 2) (##fixnum.+ k 2)
> (##bignum.mdigit-div! u (##fixnum.+ i 1) v (##fixnum.+ k 1) q-hat
> (##bignum.mdigit-div! u i v k q-hat borrow)))
> (let ((borrow (if (##fixnum.< n k) borrow
> (##bignum.mdigit-div! u i v k q-hat borrow))))
> (if (##fixnum.< borrow 0)
> (let loop5 ((i j) (l 0) (carry 0))
> (if (##fixnum.< n l)
> (begin (##bignum.mdigit-set! q j
> (##fixnum.- q-hat 1)) (loop3 (##fixnum.- j 1)))
> (loop5 (##fixnum.+ i 1)
> (##fixnum.+ l 1) (##bignum.mdigit-mul! u i v l 1 carry))))
> (begin (##bignum.mdigit-set! q j q-hat)
> (loop3 (##fixnum.- j 1))))))))
> (##cons (##bignum.normalize! q) (##arithmetic-shift
> (##bignum.normalize! u) (##fixnum.- normalizing-bit-shift)))))))))))
>
> _______________________________________________
> Gambit-list mailing list
> Gambit-list at iro.umontreal.ca
> https://webmail.iro.umontreal.ca/mailman/listinfo/gambit-list
More information about the Gambit-list
mailing list