Escribí help mientras estaba en el GDB, pero no encontré nada acerca de step-into, step -ver y salir. Puse un punto de interrupción en un programa de ensamblaje en _start (break _start). Luego escribí next y terminó la depuración. Supongo que fue porque terminó _start y no «t entrar como yo quisiera.

¿Alguien que pueda ayudar?

Comentarios

  • Lea los documentos completos de GDB. Según recuerdo, me ayudaron mucho con esto cuando lo estaba aprendiendo. Desafortunadamente, no he ' t necesitado depurar ningún programa en ese nivel durante varias décadas, por lo que los comandos reales parecen haberse intercambiado en mi cerebro. Entonces, no puedo ' realmente escribir una respuesta. Pero, si lo averigua en los manuales, entonces puede responder su propia pregunta para obtener una bonificación.
  • @MAP I ' Lo intentaré de nuevo. Traté de usar un depurador mejor (KDbg) pero No ' éxito para usarlo en Ubuntu .
  • gdb es un buen depurador. Es posible que desee utilizar Emacs como su interfaz.
  • gdb es un depurador terrible. Hay una gran cantidad de extensiones para lidiar con lo que apesta. Sintaxis horrible, comandos no coherentes, paginación horrible y torpe, formato arcaico, no ' t tiene un hexdump. Entonces no, ' no es un buen depurador. Si cree que lo es, entonces no ' t usó un buen depurador.

Respuesta

help running proporciona algunas sugerencias:

Hay step y next instucciones (y también nexti y stepi).

(gdb) help next Step program, proceeding through subroutine calls. Usage: next [N] Unlike "step", if the current source line calls a subroutine, this command does not enter the subroutine, but instead steps over the call, in effect treating it as a single source line. 

De modo que podemos ver que step pasa a subrutinas, pero next pasará sobre subrutinas.

El step y stepi (y el next y nexti) se distinguen por incrementos de «línea» o «instrucción».

step -- Step program until it reaches a different source line stepi -- Step one instruction exactly 

Relacionado es finish:

(gdb) help finish Execute until selected stack frame returns. Usage: finish Upon return, the value returned is printed and put in the value history. 

Hay mucha más información útil en https://sourceware.org/gdb/onlinedocs/gdb/Continuing-and-Stepping.html

Comentarios

  • ¿Qué significa ¿Quiere decir hasta que llegue a una línea fuente diferente ?
  • for(i=0;i<10;i++) { printf("%d\n",i); } es una línea fuente pero múltiples instrucciones.
  • ¿Hay alguna forma de salir? No pude ' t encontrarlo en la ayuda para ejecutar.
  • ¿Qué quieres decir con " step-out "? El comando finish completará el marco de pila actual, que normalmente completará la subrutina actual y volverá a la persona que llama.
  • finish o fin en GDB, es el step-out en IDEA o Eclipse.

Responder

Vine aquí porque tenía la misma pregunta . Finalmente pensé que, para mi propósito, cada vez que pudiera usar algo como «salir» de un bucle, puedo establecer otro punto de interrupción después del bucle y luego dejar que el programa continue termine el bucle y corre hacia el punto de interrupción después. Lo siento si eso es obvio para la mayoría de las personas, pero probablemente sea útil para alguien que busque una respuesta a esta pregunta.

Responder

Utilice el comando «terminar»; esto a veces hace lo mismo que «salir». Terminará lo que está haciendo la pila (una función, por lo general) y luego pasará a la siguiente línea. Busque el comando para obtener más información.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *