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
ofin
en GDB, es elstep-out
enIDEA
oEclipse
.
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.