[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