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. ------------------------------------------------------------------------ [EMAIL PROTECTED]:~$ 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 [EMAIL PROTECTED]:~$ ------------------------------------------------------------------------ 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