212 lines
6.3 KiB
Plaintext
212 lines
6.3 KiB
Plaintext
/*
|
||
* $Id$
|
||
*/
|
||
|
||
/*
|
||
* Las siguientes partes son derechos adquiridos de sus autores individuales.
|
||
* www - http://www.harbour-project.org
|
||
*
|
||
* Copyright 2001 Gonzalo A. Diethelm <Gonzalo.Diethelm@jda.cl>
|
||
* Documentaci¢n en Ingl‚s
|
||
*
|
||
* Copyright 2001 Alejandro de G rate <alex_degarate@hotmail.com>
|
||
* Traducci¢n al Espa¤ol
|
||
*
|
||
* Vea doc/license.txt por los t‚rminos de la licencia.
|
||
*
|
||
*/
|
||
|
||
|
||
INTRODUCCION AL SEGUIMIENTO DE LA EJECUCION (rastrear)
|
||
======================================================
|
||
|
||
Este archivo explica como habilitar el seguimiento en Harbour.
|
||
|
||
|
||
SEGUIMIENTO
|
||
===========
|
||
|
||
Harbour implementa el seguimiento al agregar llamadas a la siguiente
|
||
macro en c¢digo C:
|
||
|
||
HB_TRACE(level, ("parametros estilo printf", arg1, arg2));
|
||
|
||
El nivel epecificado por la llamada a HB_TRACE afecta a Harbour en
|
||
dos formas: tiempo de compilaci¢n y tiempo de ejecuci¢n.
|
||
|
||
|
||
TIEMPO DE COMPILACION
|
||
=====================
|
||
|
||
En tiempo de compilaci¢n, la macro chequea cuando la constante del
|
||
preprocesador HB_TR_LEVEL es establecida a alguno de los siguientes
|
||
valores:
|
||
|
||
#define HB_TR_ALWAYS 0
|
||
#define HB_TR_FATAL 1
|
||
#define HB_TR_ERROR 2
|
||
#define HB_TR_WARNING 3
|
||
#define HB_TR_INFO 4
|
||
#define HB_TR_DEBUG 5
|
||
|
||
Si no es establecida a alguna de estas, la macro es seteada al valor
|
||
HB_TR_DEFAULT, la cual est actualmente establecida (en hbtrace.h) a
|
||
HB_TR_WARNING.
|
||
|
||
Cuando el usuario expl¡citamente establece HB_TR_LEVEL ¢ este es
|
||
establecido por el compilador, sus efectos son como sigue: cualquier
|
||
llamada en el c¢digo con un nivel mayor que HB_TR_LEVEL son borradas
|
||
del c¢digo; estas llamadas simplemente desaparecen, y no hay efecto en
|
||
la perfomance del c¢digo despu‚s de eso.
|
||
|
||
|
||
TIEMPO DE EJECUCIÓN
|
||
===================
|
||
|
||
En tiempo de ejecuci¢n, el usuario puede establecer la variable de
|
||
entorno HB_TR_LEVEL a una de:
|
||
|
||
HB_TR_ALWAYS
|
||
HB_TR_FATAL
|
||
HB_TR_ERROR
|
||
HB_TR_WARNING
|
||
HB_TR_INFO
|
||
HB_TR_DEBUG
|
||
|
||
con el siguiente efecto: cualquiera de las llamadas a HB_TRACE que
|
||
fueron dejadas por el compilador y que tenga un nivel inferior ¢ igual
|
||
a HB_TR_LEVEL imprimir sus argumentos a la salida stderr (pantalla).
|
||
|
||
|
||
EJEMPLOS
|
||
========
|
||
|
||
HB_TR_LEVEL HB_TR_LEVEL Descripci¢n
|
||
compilaci¢n ejecuci¢n
|
||
----------------------------------------------------------------------
|
||
HB_TR_INFO HB_TR_ERROR Todas las llamadas con niveles HB_DEBUG
|
||
son eliminadas del c¢digo, as¡ ellas no
|
||
tienen efecto en la perfomance; solamente
|
||
llamadas con niveles de HB_TR_ERROR,
|
||
HB_TR_FATAL y HB_TR_ALWAYS son impresas.
|
||
|
||
HB_TR_WARNING HB_TR_INFO Todas las llamadaa con niveles HB_INFO y
|
||
HB_DEBUG son eliminadas del c¢digo, as¡
|
||
ellas no tienen efecto en la perfomance;
|
||
solamente llamadas con niveles de
|
||
HB_TR_ERROR, HB_TR_FATAL y HB_TR_ALWAYS
|
||
son impresas. Note como estableciendo
|
||
HB_TR_INFO en tiempo de ejecuci¢n no
|
||
tiene ning£n efecto, porque el c¢digo fu‚
|
||
compilado con un menor nivel de rastreo.
|
||
|
||
Por ejemplo, Yo compilo Harbour en WinNT con gcc (MINGW32), as¡
|
||
usualmente establezco la variable de entorno C_USR a algo as¡:
|
||
|
||
export C_USR="-DHARBOUR_USE_WIN_GTAPI -DHB_TR_LEVEL=HB_TR_INFO"
|
||
|
||
y me aseguro que tengo todo el seguimiento para los niveles INFO,
|
||
WARNING, ERROR, FATAL y ALWAYS. Si obtengo demasiada informaci¢n,
|
||
en tiempo de ejecuci¢n, yo puedo cambiar la variable de entorno a:
|
||
|
||
export HB_TR_LEVEL=HB_TR_WARNING
|
||
|
||
y mantener alejado todo el seguimiento del nivel INFO. En este caso
|
||
todas las llamadas a la funci¢n de seguimiento para el nivel INFO
|
||
ser n hechas de todas formas, as¡ que habr un p‚rdida de perfomance.
|
||
|
||
|
||
USO
|
||
===
|
||
|
||
Cuando Harbour es compilado / ejecutado con alg£n nivel de seguimiento
|
||
y, entonces usado para compilar una aplicaci¢n regular de Harbour, la
|
||
aplicaci¢n producir MONTONES de informaci¢n a la salida stderr.
|
||
Si Ud. est usando un sensible shell de comando (como ser bash) Ud.
|
||
puede redirigir la salida stderr a un archivo como en:
|
||
|
||
mi_aplic >rastro.txt
|
||
|
||
|
||
REDIRECCION
|
||
===========
|
||
|
||
La salida generada mientras se efect£a el seguimiento, va a stderr por
|
||
defecto. Ud. puede controlar esto en tiempo de ejecuci¢n al establecer
|
||
la variable de entorno HB_TR_OUTPUT al nombre del archivo donde Ud.
|
||
podr¡a querer que la salida de seguimiento sea dirigida. Si hay alg£n
|
||
problema abriendo el archivo para escritura, la salida se revierte a
|
||
stderr.
|
||
|
||
|
||
RASTREANDO EL PREPROCESADOR Y EL COMPILADOR
|
||
===========================================
|
||
|
||
Usualmente, Ud, no desear habilitar el seguimiento en el preprocesador
|
||
y en el compilador; de otra menera Ud. ver la salida de seguimiento
|
||
mientras compila a Harbour mismo. Si Ud. REALMENTE quiere habilitar el
|
||
seguimiento en el pre-procesador y/o el compilador, Ud. debe definir
|
||
en adici¢n a como se describe arriba, la siguiente variable, y entonces
|
||
recompilar el preprocesador / compilador:
|
||
|
||
HB_TRACE_UTILS
|
||
|
||
El valor no tiene ninguna importancia.
|
||
|
||
|
||
SEGUIMIENTO Y EJECUCION
|
||
=======================
|
||
|
||
Es tambi‚n posible habilitar y deshabilitar el seguimiento en tiempo
|
||
de ejecuci¢n y averiguar y establecer el nivel de seguimiento. Desde
|
||
c¢digo C:
|
||
|
||
* Para averiguar el estado actual de seguimiento, y opcionalmente
|
||
cambiar el estado actual a un valor dado (el cual deber¡a estar
|
||
en el rango [0,1], de otra manera, el estado actual permanece sin
|
||
cambios):
|
||
|
||
hb_tracestate( estado );
|
||
|
||
Por lo tanto, para s¢lo averiguar el estado actual, Ud. puede llamar
|
||
en forma segura:
|
||
|
||
estado_actual = hb_tracestate(-1);
|
||
|
||
|
||
Para desactivar completamente el seguimiento:
|
||
|
||
hb_tracestate(0);
|
||
|
||
|
||
Para activar el seguimiento:
|
||
|
||
hb_tracestate(1);
|
||
|
||
|
||
* Para averiguar el nivel actual de seguimiento, y opcionalemente
|
||
cambiar el nivel actual a un valor dado (cual deber¡a estar en el
|
||
rango [0,5], de otra manera, el estado actual permanece sin cambios):
|
||
|
||
hb_tracelevel( nivel );
|
||
|
||
|
||
Por lo tanto, para s¢lo averiguar el nivel actual, Ud. puede llamar
|
||
en forma segura:
|
||
|
||
nivel_actual = hb_tracelevel(-1);
|
||
|
||
|
||
|
||
|
||
Hay funciones para ser llamadas desde c¢digo Clipper:
|
||
(en realidad desde Harbour)
|
||
|
||
current_state := HB_TRACESTATE( [new_state] )
|
||
current_level := HB_TRACELEVEL( [new_level] )
|
||
|
||
|
||
|
||
|
||
|