Added stepping to debugger
This commit is contained in:
parent
1c84a9c862
commit
54709e55f8
@ -10,7 +10,7 @@
|
||||
;; assembler
|
||||
assemble
|
||||
;; debugger
|
||||
make-debugger debugger-continue
|
||||
make-debugger debugger-continue debugger-step
|
||||
debugger-vm
|
||||
debugger-breakpoints debugger-breakpoints-set!
|
||||
debugger-breakpoint-add! debugger-breakpoint-ref
|
||||
|
@ -12,15 +12,16 @@
|
||||
debugger-breakpoint-add! debugger-breakpoint-ref
|
||||
debugger-breakpoint-enable! debugger-breakpoint-disable!
|
||||
debugger-breakpoint-delete!
|
||||
debugger-continue))
|
||||
debugger-step debugger-continue))
|
||||
|
||||
(define-record-type <debugger>
|
||||
(make-debugger vm source breakpoints continuation)
|
||||
(make-debugger vm source breakpoints continuation stepping)
|
||||
debugger?
|
||||
(vm debugger-vm)
|
||||
(source debugger-source)
|
||||
(breakpoints debugger-breakpoints)
|
||||
(continuation debugger-continuation debugger-continuation-set!))
|
||||
(continuation debugger-continuation debugger-continuation-set!)
|
||||
(stepping debugger-stepping? debugger-stepping-set!))
|
||||
|
||||
(define (make-breakpoints labels)
|
||||
(define the-breakpoints '())
|
||||
@ -51,17 +52,23 @@
|
||||
(define the-debugger #f)
|
||||
(define (debug)
|
||||
(shift k
|
||||
(if (((debugger-breakpoints the-debugger) 'ref) (vm-pc (debugger-vm the-debugger)))
|
||||
(debugger-continuation-set! the-debugger k)
|
||||
(k))))
|
||||
(if (or (debugger-stepping? the-debugger)
|
||||
(((debugger-breakpoints the-debugger) 'ref) (vm-pc (debugger-vm the-debugger))))
|
||||
(debugger-continuation-set! the-debugger k)
|
||||
(k))))
|
||||
(define vm (make-vm #:debugger debug))
|
||||
(vm-load-program! vm prgm)
|
||||
(set! the-debugger (make-debugger vm source (make-breakpoints symbols) #f))
|
||||
(set! the-debugger (make-debugger vm source (make-breakpoints symbols) #f #f))
|
||||
(debugger-breakpoint-add! the-debugger 1)
|
||||
(reset (run-vm vm))
|
||||
the-debugger)
|
||||
|
||||
(define (debugger-continue debugger)
|
||||
(debugger-stepping-set! debugger #f)
|
||||
((debugger-continuation debugger)))
|
||||
|
||||
(define (debugger-step debugger)
|
||||
(debugger-stepping-set! debugger #t)
|
||||
((debugger-continuation debugger)))
|
||||
|
||||
(define (debugger-breakpoint-add! debugger breakpoint)
|
||||
|
17
tests.scm
17
tests.scm
@ -144,4 +144,19 @@
|
||||
(stack-pop my-data)
|
||||
(stack-push my-data 1)
|
||||
(debugger-continue my-debugger)
|
||||
(assert-equal 1 (vm-memory-ref my-vm 1))))
|
||||
(assert-equal 1 (vm-memory-ref my-vm 1)))
|
||||
(define-test "stepping"
|
||||
(define my-debugger (make-debugger fib-program-asm))
|
||||
(define my-vm (debugger-vm my-debugger))
|
||||
(vm-memory-set! my-vm 1 10)
|
||||
(vm-pc-set! my-vm 5)
|
||||
(debugger-breakpoint-add! my-debugger 'fib)
|
||||
(debugger-continue my-debugger)
|
||||
(assert-equal 23 (vm-pc my-vm))
|
||||
(debugger-step my-debugger)
|
||||
(assert-equal 24 (vm-pc my-vm)) ;; dup is a 1 byte instruction
|
||||
(debugger-step my-debugger)
|
||||
(assert-equal 29 (vm-pc my-vm)) ;; push is a 5 byte instruction
|
||||
(debugger-continue my-debugger)
|
||||
(assert-equal 23 (vm-pc my-vm)) ;; continue stops stepping
|
||||
))
|
||||
|
Loading…
Reference in New Issue
Block a user