Ravi
Welcome
Documentation
Documentation
About Ravi
Documentation
Introduction
Premiers pas avec Ravi
ravitool
Scheme Tutorial
Objets Scheme
Le shell ravi
Starting Ravi
Le module trace
Les ports d'E/S
The C Parser
load, require, modules
Système d'interruptions
Scheme compiler
C++ mode
Generating C++ Modules
La déclaration struct
Le type "C-object"
More information
Installation

[PREV][SUIV]

Le module trace

Il y a 2 formes de traces: la trace classique, et la trace "silencieuse". La trace silencieuse n'effectue aucune impression en cours d'exécution, mais stocke ses messages dans une liste tampon, de taille limitée, qu'on peut inspecter après exécution. En effet, très souvent la partie critique et intéressante d'une trace se trouve après des milliers de lignes sans intérêt. La trace silencieuse permet de voir juste ces quelques lignes "à la fin".

Toutes les fonctions de traces utilisent la fonction top-write, ce qui garantit que les traces ne bouclent jamais, et occupent une place modulable.

(trace nom1 ...) invoque le traceage des fonctions indiquées. On peut tracer toutes les fonctions définies au niveau de l'interpréteur. Il n'y a pas de trace à l'intérieur des fonctions compilées, sauf quand elles appelent des fonctions interprétées, ou une fonction déclarée export-only.

(untrace nom1 ...) supprime la trace (classique ou silencieuse). (untrace) supprime toutes les traces en cours.

(silent-trace nom1 ...) invoque la trace silencieuse. Les deux types de trace peuvent fonctionner en même temps, mais pour une fonction donnée une seule trace est possible à un instant donné.

(trace-back n) imprime les n dernières lignes de trace silencieuse.

(trace-back) imprime tout

(trace-back n1 n2) imprime de la ligne n1 à la ligne n2.

(init-trace-buffer n) Appel de fonction qui permet de changer la taille du buffer des traces (valeur initiale 25).

Difficulté: il s'avère difficile de vider le buffer des traces - si l'exécution est courte, le trace-back fera apparaitre des trace des exécutions précédentes. Si cela pose vraiment un problème il faudra l'arranger.

Le port des traces

Il est parfois gênant de voir l'impression des traces se melanger avec les sorties normales d'une exécution. Le remède à ce problème est le suivant. Toutes les impressions des traces (sauf pour les messages d'erreur) se font sur le port courant sauf si la variable *trace-port* est un port de sortie, dans quel cas les impression vont vers ce port.

Exemple


(set! *trace-port* (open-output-file "mestraces")) ... les exécutions tracées (close-output-port *trace-port*) ... le fichier de traces est prêt

Trace de méthodes

Ces fonctions ne sont pas définies autoload en standard - vous pouvez ajouter une telle définition à votre .RaviInit.scm

(trace-method method class)

(silent-trace-method method class)

(untrace-method method class)

Ces fonctions sont analogues aux fonctions de trace pour les fonctions; les traces silencieuses se font vers le même buffer.