[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: DDD POR FAVORRRRRRRRRRRRRRRRRRRRRRR



On 4 Aug 2003, Cesar Rincon wrote:

> On Mon, 2003-08-04 at 04:00, gustavo wrote:
> 
> >   Molesto devuelta con mi  problema con el debugger DDD, ya no se q' 
> > probar, sienpre entra en las funciones en ves de saltar
> > a la siguiente linea cuando hago un `Step'.
> 
> Nunca he usado DDD pero, como ya te decía hace unos días, en GDB el
> comando 'step' debe funcionar *siempre* como indicas: entrando en las
> subrutinas (excepto cuando la subrutina está en una biblioteca enlazada
> sin información de debug).  El comando 'next' es el que salta las
> subrutinas.

A mi me parece que eso no es cierto. Todos los debugger son susceptibles
de perderse. Yo creo que un puntero descontrolado puede llegar a afectar 
al correcto funcionamiento del debugger. No es algo corriente per puede
llegar a pasar.

Yo uso para depurar un sistema de trazas. Evidentemente gdb es mejor 
pero el sistema de trazas funciona bien siempre. Repito que a mi todos
los depuradores me han fallado en alguna ocasión con algún tipo de
error. Por eso entre otros motivos he perfeccionado este sistema.

Te volcará información relativa a la localización de la traza.

Puedes usarlo poniendo en el código cosas como:

TRAZA("Var1=%s, Var2=%s, contador=%d", cadena1, cadena2, cont);

No es necesario incluir información de localización ya que la traza
se acompaña  de esa información.


/******************************************************************
 * traza.h (solo sirve para depurar errores
 *
 * No existe ningun 'traza.c' Para usarlo solo hay
 * que colocar TRAZA ("...", .., ..); a lo printf.
 * 
 * Abre y cierra el fichero a cada traza para garantizar
 * la operación en caso de terminación anómala del programa.
 * Esto es muy seguro pero hace que el programa vaya mucho
 * más ento cuando el sistema de trazas está activado.
 * ***************************************************************/

#ifndef _TRAZA_H
#define _TRAZA_H

#define _(String) (String)
/** Comentar la linea siguiente para desactivar trazas **/
#define ENABLE_TRAZA 1
#ifdef ENABLE_TRAZA
FILE *ftraza;
char filenameTraza[80];
#define TRAZA(args...)	sprintf(filenameTraza, "/tmp/traza_%d", geteuid());\
			ftraza=fopen(filenameTraza, "a");\
			if (ftraza==NULL){\
				perror(""); \
				fprintf(stderr,_("Error abriendo fichero '/tmp/traza'"));\
				ftraza=stderr;\
			}\
			fprintf(ftraza, "%d_%s:%d in %s(): ", getpid(),  __FILE__, __LINE__, __FUNCTION__ ); \
                        fprintf(ftraza, args);\
			fprintf(ftraza, "\n");\
			fclose(ftraza)

#else
#define TRAZA(args...)   /* Definición vacía deja sin efecto las trazas */
#endif /* ENABLE_TRAZA */

#endif /* _TRAZA_H */



-- 
Un saludo
Antonio Castro

       /\     /\   Ciberdroide Informática 
         \\W//  << http://www.ciberdroide.com >>
        _|0 0|_                                                    
+-oOOO-(___o___)-OOOo---------------------+ 
| . . . . U U . Antonio Castro Snurmacher |  
| . . . . . . . acastro@ciberdroide.com   | 
+()()()---------()()()--------------------+



Reply to: