[gambit-list] statprof -- a statistical profiler for Gambit-C 4.0
Marc Feeley
feeley at iro.umontreal.ca
Wed Apr 27 12:16:16 EDT 2005
On Apr 27, 2005, at 1:10 AM, Bradley Lucier wrote:
>
> On Apr 26, 2005, at 10:25 PM, Bradley Lucier wrote:
>
>> I'm trying to use your profiler as a test coverage tool; is there any
>> way to make the intervals between when samples are taken are made
>> very small?
>
> Scratch that thought; instead, would it be easy to write a coverage
> tool that is a modified version of your profiling tool?
>
> Brad
>
> _______________________________________________
> Gambit-list mailing list
> Gambit-list at iro.umontreal.ca
> http://mailman.iro.umontreal.ca/mailman/listinfo/gambit-list
>
Something like this might be a good start for such a tool.
Marc
;
========================================================================
======
; File: "coverage.scm", Time-stamp: <2005-04-27 12:12:52 feeley>
; Copyright (C) 2005 by Marc Feeley, All Rights Reserved.
;
========================================================================
======
; This is a simple test coverage system for Gambit 4.0 that uses the
; interpreter's single stepping infrastructure. The test coverage can
; only be done on interpreted code. However, the test coverage system
; (this file) can either be compiled or not, but if it is not compiled
; the program's execution will be much slower. When the test coverage
; system is compiled the program's execution is roughly 4 times slower
; than normal. When the test coverage system is interpreted the
; program's execution is roughly 20 times slower than normal.
;
; Here's a sample use:
;
; % gsi coverage.scm -
; > (coverage-on)
; > (if #f (+ 1 2 3) 4)
; (console)@2.5
; (console)@2.18
; 4
; > (coverage-off)
; (console)@3.2
; (console)@3.1
; > (if #f (+ 1 2 3) 4)
; 4
;
========================================================================
======
(define-macro (coverage-system-setup)
(define coverage-system-code
'(let ()
(define (step-handler leapable? $code rte execute-body . other)
(hit (##code-locat $code))
(##apply execute-body (##cons $code (##cons rte other))))
(define (hit locat)
(if locat
(begin
; the statistics could be tallied and displayed in a
; more user-friendly way than just dumping them to stderr
(##display-locat locat #t ##stderr-port)
(##newline ##stderr-port))))
(let ((new-stepper
(##vector (##vector step-handler
step-handler
step-handler
step-handler
step-handler
step-handler
step-handler)
#f
#f
#f
#f
#f
#f
#f)))
(set! ##main-stepper new-stepper))))
`(if (##interp-procedure? (lambda () 0)) ; compiled or interpreted?
(begin
(set! ##main-stepper (##no-stepper)) ; don't step coverage
system!
(##eval ',coverage-system-code))
(begin
,coverage-system-code)))
(define (coverage-on)
(##step-on))
(define (coverage-off)
(##step-off))
(coverage-system-setup)
;
========================================================================
======
More information about the Gambit-list
mailing list