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

Re: DDD POR FAVORRRRRRRRRRRRRRRRRRRRRRR



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.

Déjame ver si puedo darte una resolución definitiva a tu problema, al
menos hasta donde en una lista como ésta se puede llegar.  Haz lo
siguiente:

------------------------------------------------------------------------
cat >/tmp/prueba.c <<END
#include "stdio.h"
void subrutina() {
 puts("en la subrutina");
}
int main(int argc, char** argv)
{
 puts("entrando a la subrutina");
 subrutina();
 puts("saliendo de la subrutina");
 return 0;
}
END
gcc -g -o /tmp/prueba /tmp/prueba.c
------------------------------------------------------------------------

Hecho lo anterior, corre /tmp/prueba en GDB, pon un breakpoint en
main(), y corre el programa.  Cuando se detenga, avanza con 'step' hasta
el final.  Córrelo de nuevo, avanza con 'next' hasta el final.  Te envío
la transcripción de ese experimento en mi máquina.  Las líneas que
inician con un prompt de shell, o con '(gdb)', las escribí yo, por
supuesto; el resto es output de GDB.  Nota que redirijo el output del
programa a /dev/null, para que no nos estorbe.

------------------------------------------------------------------------
crincon@madero:~$ gdb /tmp/prueba
GNU gdb 2002-04-01-cvs
Copyright 2002 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you
are welcome to change it and/or distribute copies of it under certain
conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for
details.
This GDB was configured as "i386-linux"...
(gdb) set args >/dev/null
(gdb) b main
Breakpoint 1 at 0x804840e: file /tmp/prueba.c, line 8.
(gdb) run
Starting program: /tmp/prueba >/dev/null

Breakpoint 1, main (argc=1, argv=0xbffffad4) at /tmp/prueba.c:8
8        puts("entrando a la subrutina");
(gdb) s
9        subrutina();
(gdb) s
subrutina () at /tmp/prueba.c:3
3        puts("en la subrutina");
(gdb) s
4       }
(gdb) s
main (argc=1, argv=0xbffffad4) at /tmp/prueba.c:10
10       puts("saliendo de la subrutina");
(gdb) s
11       return 0;
(gdb) s
12      }
(gdb) s
0x4003714f in __libc_start_main () from /lib/libc.so.6
(gdb) s
Single stepping until exit from function __libc_start_main, 
which has no line number information.

Program exited normally.
(gdb) run
Starting program: /tmp/prueba >/dev/null

Breakpoint 1, main (argc=1, argv=0xbffffad4) at /tmp/prueba.c:8
8        puts("entrando a la subrutina");
(gdb) n
9        subrutina();
(gdb) n
10       puts("saliendo de la subrutina");
(gdb) n
11       return 0;
(gdb) n
12      }
(gdb) n
0x4003714f in __libc_start_main () from /lib/libc.so.6
(gdb) n
Single stepping until exit from function __libc_start_main, 
which has no line number information.

Program exited normally.
(gdb) q
crincon@madero:~$ 
------------------------------------------------------------------------

Ese es el comportamiento correcto y documentado de GDB.  Si tu GDB hace
alguna otra cosa con ese mismo programa y esa misma secuencia de
comandos, es momento de reportar un bug en GDB.  El manual de GDB
incluye información al respecto.  Puedes consultarlo en tu máquina con:

 info gdb 'GDB Bugs'

O puedes ver la sección relevante en línea.  Por ejemplo, en:

 http://www.gnu.org/manual/gdb-4.17/html_chapter/gdb_18.html

Por el contrario, si GDB funciona correctamente, y es DDD el que exhibe
el problema, entonces reporta un bug en DDD.  Sólo asegúrate de leer
primero la documentación de DDD para estar seguro de que no se está
comportando correctamente (e.g., quizá DDD tiene, igual que GDB,
comandos separados para 'step' y 'next', y tú aún no lo sabes).

 -CR




Reply to: