Vista dividida de gdb con código

111

Estaba depurando un programa en gdb y de alguna manera encontré una nueva característica que nunca había visto o escuchado antes, una vista dividida donde puedo ver y explorar el código además de dar comandos:

Lo siento por la imagen, pero ttys no tiene capturas de pantalla.

¿Que es esto? ¿Qué hice o, más específicamente, cómo puedo volver a obtener este modo de pantalla dividida? ¿Hay un nombre para este modo o en algún lugar donde pueda leer sobre cómo usarlo?

Kevin
fuente
2
Para una referencia rápida: puede salir de este modo usando cualquiera de Cx Ca, Cx a o Cx A.` Vea esta pregunta .
Richard

Respuestas:

95

Se llama TUI (no es broma). Empiece por ejemplo con gdbtuio gdb -tui...

0xC0000022L
fuente
11
también puede usar layout nextdespués de comenzar gdbnormalmente
Khaverim
87

Puede activarlo dinámicamente presionando ctrl+ xy ctrl+ a.

POHAN WU
fuente
gracias @ user146043, esta parece la única forma si está ejecutando screen al mismo tiempo que ctrl-a es la forma de iniciar los comandos de la pantalla.
olik79
¡Parece que también puedes cerrar con ese combo!
Nick Desaulniers
16

También puede iniciarlo desde el shell de gdb usando el comando "-" (guión). Sin embargo, no estoy seguro de cómo apagarlo dinámicamente.

Neowizard
fuente
Este parece ser el más fácil de usar y recordar.
Siyuan Ren
2
Puede salir haciendo cualquiera de Cx Ca, Cx a o Cx A. Consulte stackoverflow.com/questions/14147117/…
dmonopoly
15

Panel de GDB

https://github.com/cyrus-and/gdb-dashboard

El panel de GDB utiliza la API oficial de GDB Python e imprime la información que desea cuando GDB se detiene, por ejemplo, después de next, como el displaycomando nativo .

Vs TUI:

  • más robusto, ya que simplemente imprime en stdout en lugar de poner el caparazón en un estado de maldiciones más mágicas, por ejemplo:

  • altamente configurable desde Python: puede seleccionar lo que desea generar y el tamaño de cada sección en función de lo que esté depurando.

    Las vistas más útiles ya están implementadas: fuente, ensamblado, registros, pila, memoria, hilos, expresiones ... pero debería ser fácil extenderlo con cualquier información que esté expuesta en la API de GDB Python.

    TUI solo permite mostrar dos de fuente, ensamblado y registros y eso es todo. A menos que desee modificar su código fuente C, por supuesto ;-)

ingrese la descripción de la imagen aquí

Creo que GDB debería enviarse con una configuración como esa lista para usar y activada de manera predeterminada, atraería a muchos más usuarios de esa manera.

Ah, y el desarrollador principal, Andrea Cardaci , ha sido muy receptivo y asombroso. Grandes felicitaciones.

Ver también: ¿Cómo resaltar y colorear la salida gdb durante la depuración interactiva?

Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
fuente
2
No hay suficientes palabras para describir lo maravilloso que es. Gracias :)
unresolved_external
11

Escriba layoutcomo un comando en gdb y se mostrará la ventana dividida.

Alfredo
fuente
5

Cuando GDB está en el modo estándar, el uso wincambiará automáticamente al modo TUI.
Otro comando para el modo TUI:

  • info win
    Enumere y proporcione el tamaño de todas las ventanas mostradas.
  • focus next | prev | src | asm | regs | split
    Establezca el foco en la ventana nombrada. Este comando permite cambiar la ventana activa para que las teclas de desplazamiento puedan verse afectadas a otra ventana.

Lea aquí para obtener más ayuda.

girardengo
fuente
2

También hay una herramienta de interfaz para GDB llamada cgdb. Incluso con algo de resaltado de color. "ESC" para cambiar a la vista de código, "i" para volver a gdb

cgdb

usuario3042599
fuente
1

El modo tui se inspiró claramente en emacs; lo descubrí por accidente cuando presioné ^ Xo, que cambia entre ventanas divididas en emacs; a veces lo golpeo distraídamente cuando lo que debería hacer es cambiar a un programa diferente. De todos modos, eso lleva a otra característica aún no mencionada, que puede mover el cursor desde la ventana de código (donde puede desplazarse) a la línea de comando, o viceversa, con ^ Xo.

Gota
fuente
Obviamente, la mayoría de los programas de GNU tienen emacs como combinaciones de teclas, principalmente por razones de coherencia. Sé que hay un modo vi en bash, pero eso no es lo suficientemente bueno como el modo emacs.
Klaus