backtraceo where, incluso info lineo simplemente bt(para retroceso). dirac.org/linux/gdb para un tutorial de gdb
dwalter
bto backtraceo whereimprimir pila de llamadas a funciones, fo frameimprimir siguiente línea a ejecutar.
Eric Wang
Respuestas:
21
Obtengo la misma información mientras depuro. Aunque no mientras reviso el seguimiento de la pila. Lo más probable es que hayas usado la bandera de optimización, creo. Consulte este enlace , algo relacionado.
Intente compilar con -g3eliminar cualquier indicador de optimización. Entonces podría funcionar. HTH!
Ah, entonces, aunque mi programa fue compilado -gpara contener información de depuración, actualmente estoy en un marco de pila, tomado de una de las bibliotecas compartidas, que aparentemente no se compiló para contener información de línea. Gracias, kumar.
Boris Burkov
104
El comando 'marco' le dará lo que está buscando. (Esto se puede abreviar simplemente 'f'). Aquí hay un ejemplo:
Sin un argumento, 'frame' solo le dice dónde se encuentra (con un argumento cambia el marco). Puede encontrar más información sobre el comando frame aquí .
Tenga en cuenta que gdb es un comando poderoso, capaz de instrucciones de bajo nivel, por lo que está vinculado a conceptos de ensamblaje.
Lo que está buscando se llama puntero de instrucción, es decir:
El registro de puntero de instrucción apunta a la dirección de memoria que el procesador intentará ejecutar a continuación. El puntero de instrucción se llama ip en modo de 16 bits, eip en modo de 32 bits y rip en modo de 64 bits.
GDB no admite el modo de 16 bits, creo, por iplo que nunca se usa aquí. Además, en lugar de la ortografía de forma explícita el nombre del contador de programa, puede utilizar el alias de GDB para ello: $pc. Así x/10i $pcque desensamblará 10 instrucciones en el puntero de instrucción actual independientemente de la arquitectura; funcionará en i386, x86_64, ARM, etc.
Ruslan
18
Comando dónde se puede usar o marco . donde el comando dará más información con el nombre de la función
Todas las respuestas anteriores son correctas, lo que prefiero es usar el modo tui (ctrl + XA) que muestra su ubicación y la función en una ventana separada que es muy útil para los usuarios. Espero que eso también ayude.
backtrace
owhere
, inclusoinfo line
o simplementebt
(para retroceso). dirac.org/linux/gdb para un tutorial de gdbbt
obacktrace
owhere
imprimir pila de llamadas a funciones,f
oframe
imprimir siguiente línea a ejecutar.Respuestas:
Obtengo la misma información mientras depuro. Aunque no mientras reviso el seguimiento de la pila. Lo más probable es que hayas usado la bandera de optimización, creo. Consulte este enlace , algo relacionado.
Intente compilar con
-g3
eliminar cualquier indicador de optimización. Entonces podría funcionar. HTH!fuente
-g
para contener información de depuración, actualmente estoy en un marco de pila, tomado de una de las bibliotecas compartidas, que aparentemente no se compiló para contener información de línea. Gracias, kumar.El comando 'marco' le dará lo que está buscando. (Esto se puede abreviar simplemente 'f'). Aquí hay un ejemplo:
Sin un argumento, 'frame' solo le dice dónde se encuentra (con un argumento cambia el marco). Puede encontrar más información sobre el comando frame aquí .
fuente
Tenga en cuenta que gdb es un comando poderoso, capaz de instrucciones de bajo nivel, por lo que está vinculado a conceptos de ensamblaje.
Lo que está buscando se llama puntero de instrucción, es decir:
más detalles aquí
todos los registros disponibles en la ejecución de gdb se pueden mostrar con:
con él puede encontrar en qué modo se está ejecutando su programa (buscando cuáles de estos registros existen)
entonces (aquí usando el rip de registro más común hoy en día, reemplácelo con eip o muy raramente ip si es necesario):
le mostrará el número de línea y la fuente del archivo
le mostrará esa línea con algunos antes y después
pero probablemente
debería ser suficiente en muchos casos.
fuente
ip
lo que nunca se usa aquí. Además, en lugar de la ortografía de forma explícita el nombre del contador de programa, puede utilizar el alias de GDB para ello:$pc
. Asíx/10i $pc
que desensamblará 10 instrucciones en el puntero de instrucción actual independientemente de la arquitectura; funcionará en i386, x86_64, ARM, etc.Comando dónde se puede usar o marco . donde el comando dará más información con el nombre de la función
fuente
Todas las respuestas anteriores son correctas, lo que prefiero es usar el modo tui (ctrl + XA) que muestra su ubicación y la función en una ventana separada que es muy útil para los usuarios. Espero que eso también ayude.
fuente