Estoy haciendo una depuración a nivel de ensamblado en GDB. ¿Hay alguna manera de hacer que GDB me muestre la instrucción de ensamblaje actual de la misma manera que muestra la línea de origen actual? El resultado predeterminado después de cada comando tiene este aspecto:
0x0001433f 990 Foo::bar(p);
Esto me da la dirección de la instrucción actual, pero tengo que seguir refiriéndome a la salida de disassemble
para ver qué instrucción estoy ejecutando actualmente.
Respuestas:
Puede cambiar al diseño de ensamblaje en GDB:
Ver aquí para más información. La instrucción de ensamblaje actual se mostrará en la ventana del ensamblador.
fuente
layout regs
tui reg vector
mostrar los registros vectoriales en lugar de los registros enteros. (Sin embargo, no siempre es muy útil, ya que no le permite elegir solo el.v8_int16
o algo así, por lo que la pantalla es un gran desastre). Consulte el wiki de etiquetas x86 para obtener un tutorial rápido para depurar asm.si
), y qué característica inútil (ventana gráfica que no muestra la información necesaria). No tiene sentido rechazar esta respuesta ya que solo eres el mensajero ...·layout src
para ver el código fuente al depurar, y tambiénCTRL+x+a
Tu puedes hacer
y cada vez que GDB se detiene, mostrará el desmontaje de la próxima instrucción.
GDB-7.0
también es compatibleset disassemble-next-line on
, lo que desarmará toda la línea siguiente y le dará más contexto de desmontaje.fuente
si
(pero nos
)?El comando
se puede configurar para ejecutarse todo el tiempo utilizando el mecanismo de configuración habitual.
fuente
x/ni $pc
para ver las siguientes n instrucciones, que a menudo es bastante útil.Configurando la siguiente opción:
Le dará resultados que se ven así:
fuente
Si desea que las siguientes instrucciones se muestren automáticamente al recorrer el programa, puede usar el comando de pantalla de la siguiente manera:
display /3i $pc
Lo anterior mostrará 3 instrucciones cada vez que se llega a un punto de interrupción o cuando se realiza un solo paso en el programa.
Más detalles en la entrada del blog aquí .
fuente
Desde dentro de gdb, presione
Ctrl
x
2
y la pantalla se dividirá en 3 partes.La primera parte le mostrará el código normal en lenguaje de alto nivel.
Segundo le mostrará el ensamblaje equivalente y correspondiente
instruction Pointer
.Third le presentará el
gdb
mensaje normal para ingresar comandos.fuente
Ctrl-X 2
, pero parecegdb -tui
modo, lo cual es genial.layout split
desde el indicador gdb.Panel de GDB
https://github.com/cyrus-and/gdb-dashboard
Esta configuración de GDB utiliza la API oficial de Python de GDB para mostrarnos lo que queramos siempre que GDB se detenga después, por ejemplo
next
, al igual que TUI.Sin embargo, he descubierto que esta implementación es una alternativa más robusta y configurable al modo GDB TUI incorporado como se explica en: vista dividida gdb con código
Por ejemplo, podemos configurar el panel de GDB para mostrar el desmontaje, el origen, los registros y la pila con:
Esto es lo que parece si habilita todas las vistas disponibles:
Preguntas relacionadas:
fuente