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: