2008-10-16 6 views
139

No responda Debería usar ddd, nemiver, emacs, vim o cualquier otro front-end, solo prefiero gdb como es, pero me gustaría ver su salida con algunos colores de terminal.¿Cómo resaltar y colorear la salida de gdb durante la depuración interactiva?

+4

No le dará colores (por lo que no lo llamaré Respuesta), pero la configuración ~/.gdbinit mejorará la experiencia. Puedo usar esto como un mínimo: historia conjunto ahorrar en el conjunto de impresión bastante conjunto de salida-radix 16 conjunto altura 0 –

+0

Sería bueno para cambiar la respuesta aceptada por lo que mi viejo, respuesta incorrecta se puede eliminar. Gracias. – ddaa

+0

Una vez que resalte la línea actual en 'l' se implementa https://sourceware.org/bugzilla/show_bug.cgi?id=21044, agregaré' l' a 'hook-stop' e ingresaré Dev Nirvana. –

Respuesta

140

.gdbinit

Se pueden ajustar sus ~/.gdbinit tener colores.Se puede utilizar de .gdbinit riquezas que está disponible aquí:

https://github.com/gdbinit/gdbinit

Se pueden ajustar tanto como usted quiere también. Encontré esto gracias a this SO answer. Aquí está el tipo de salida que se puede obtener:

.gdbinit

Un repositorio GitHub también está disponible: https://github.com/gdbinit/Gdbinit

En una nota, la misma idea fue también applied to lldb.

GDB tablero de instrumentos

Siguiendo el mismo concepto, GDB Dashboard proporciona una interfaz visual modular para GDB en Python.

GDB Dashboard

(void) Walker

Otro proyecto similar utiliza el soporte de Python del BGF para proporcionar más extensibilidad, así que esto vale la pena ver: https://github.com/dholm/voidwalker

@dholm también proporciona su propia .gdbinit inspirado El anterior.

(void)walker

pwndbg

Algunos proyectos proporcionan un conjunto de funciones útiles, incluyendo pantalla mejorada. Este es el caso para PEDA o pwndbg. Este último da la siguiente descripción:

A PEDA reemplazo. En el espíritu de nuestro buen amigo windbg, pwndbg se pronuncia pwnd-bag.

  • velocidad
  • Resiliencia
  • código limpio

Proporciona comandos para apoyar la depuración y explotación de desarrollo similar a los de PEDA, y mejor pantalla (aunque esta no es la principal enfoque del proyecto). El software aún está en desarrollo y aún no se ha lanzado correctamente.

pwndbg

voltron

Los project Descripción estados:

Voltron es una interfaz de usuario de depurador extensible para los piratas informáticos.Le permite adjuntar las vistas de la utilidad que se ejecutan en otros terminales a su depurador (LLDB o GDB), mostrando información útil como desensamblaje, pila contenidos, valores de registro, etc., al tiempo que le da el mismo CLI depurador que está Acostumbrado a.

Puede modificar su .gdbinit para integrarlo automáticamente. Sin embargo, la pantalla en sí está fuera de GDB (por ejemplo, en una división de tmux).

voltron

GEF

GEF es otra opción, y se describe como:

Está dirigido a utilizarse principalmente por los explotadores y los ingenieros inversa, a proporcionar características adicionales a GDB usando la API de Python para ayudar a durante el proceso de análisis dinámico y desarrollo de exploits.

GEF

+0

muchas gracias por su respuesta, ¿tiene alguna idea de cómo desactivar la salida de registro? (Estoy usando gdb para el código de C++ y no necesito ningún nivel de ensamblador de inmediato) – vak

+0

@vak para gdbinit? – BenC

+0

sí. Maldito "Los comentarios deben tener al menos 15 caracteres de longitud". – vak

81

No son colores, pero considere gdb's text gui. Hace una gran diferencia de qué tan útil es gdb.

Puede iniciar con:

gdb -tui executable.out 

Captura de pantalla:

enter image description here

Como se puede ver, las características principales son:

  • muestra qué línea de la fuente estamos en y alrededor de las líneas
  • muestra los puntos de interrupción
+4

¡Guau! ¡Gracias! He estado buscando durante mucho tiempo un buen shell gráfico alrededor de gdb, y he intentado xxgdb, kgdb y ddd, pero ninguno de ellos funcionó muy bien para mí, así que me he quedado con la vieja interfaz de línea de comandos. ¡Pero esto es absolutamente perfecto! –

+38

Ctrl-x Ctrl-a: Ingrese esto para cambiar ay desde el modo gui de texto, funciona incluso sin la opción de línea de comando. – jturcotte

+1

Imprimir en stdout desde el programa me rompe la interfaz. ¿Alguna solución alternativa además de redirigirla? –

40

Sé que no quería una interfaz. Pero, ¿qué tal cgdb está muy cerca de gdb, es el modo de texto, pero tiene una ventana de origen arriba con resaltado de sintaxis en el código.

+2

sudo apt-get install cgdb – cs01

+2

Una verdadera casualidad :) – Ignorant

-1

puede obtener cualquier color que desee;

# gdb 
(gdb) shell echo -en '\E[47;34m'"\033[1m" 
... 
anything is now blue foreground and white background 
... 
(gdb) shell tput sgr0 
... back to normal 
15

Es posible mejorar en gran medida la apariencia de gdb mediante el uso de colores. Esto se hace a través de cualquiera de los siguientes métodos:

  1. Solicitud coloreada mediante el "indicador de configuración". Por ejemplo, haga que el mensaje sea en negrita y rojo: set prompt \033[1;31m(gdb) \033[m
  2. Mandatos coloreados a través de los enganches
  3. Color resaltado de sintaxis del comando "list".

Todos los ejemplos están disponibles en las siguientes entradas de blog escrito por Michael Kelleher:

"Beautify GDB", May 12, 2010 (via archive.org)

"Experimental GDB syntax highlighting", May 15, 2010 (via archive.org)

+14

Los enlaces están rotos. –

+7

@Mike: sería útil publicar el contenido de esos enlaces aquí ya que el sitio ya no está accesible y robots.txt impidió que archive.org lo indexe. –

+1

Puede obtener la información relevante aquí: https://sourceware.org/gdb/current/onlinedocs/gdb/Prompt.html – musiphil

6
#into .gdbinit 
shell mkfifo /tmp/colorPipe 

define hook-disassemble 
echo \n 
shell cat /tmp/colorPipe | c++filt | highlight --syntax=asm -s darkness -Oxterm256 & 
set logging redirect on 
set logging on /tmp/colorPipe 
end 

define hookpost-disassemble 
hookpost-list 
end 

define hook-list 
echo \n 
shell cat /tmp/colorPipe | c++filt | highlight --syntax=cpp -s darkness -Oxterm256 & 
set logging redirect on 
set logging on /tmp/colorPipe 
end 

define hookpost-list 
set logging off 
set logging redirect off 
shell sleep 0.1s 
end 

define hook-quit 
shell rm /tmp/colorPipe 
end 

define re 
hookpost-disassemble 
echo \033[0m 
end 
document re 
Restore colorscheme 
end 

Advertencia: Buggy. No hay soporte TUI, hack 'modo de usuario'.

Encontré la parte principal here y la modifiqué un poco. Necesita destacar, C++ filt. Si los colores se arruinan, emita el comando re.

5

cgdb es mucho mejor que gdb -tui

+0

De acuerdo. Las líneas simples impresas por mi programa destrozaron la consola de gdb -tui. Esto no ocurre bajo cgdb. ¡Gracias por el consejo! –

3

quería destacar las siguientes: enfatizan las líneas de un seguimiento de la pila que pertenecen a mis archivos de origen (en lugar de las bibliotecas).

La solución fue usar GDB-pitón (en MSYS; en Linux normalmente gdb viene con Python incorporada ya?), Enganche backtrace, utilice

python stack_trace = gdb.execute('backtrace', False, True') 

A continuación, procesar stack_trace con expresiones regulares de Python, e imprimir ellos afuera. Los colores fuertes y otros se consiguen mediante una función como esta:

def term_style(*v): 
    """1 is bold, 30--37 are the 8 colours, but specifying bold may also 
    change the colour. 40--47 are background colours.""" 
    return '\x1B['+';'.join(map(str, v))+'m' 

#Use like this: 
print term_style(1) + 'This will be bold' + term_style(0) #Reset. 
print term_style(1,30) + 'This will be bold and coloured' + term_style(0) 
print term_style(1,30,40) + 'Plus coloured background' + term_style(0) 
1

Otra buena combinación de colores está dada por this configuration. Hace que inspeccionar las trazas inversas sea mucho más fácil. Para usarlo, simplemente guarde ese archivo como ~/.gdbinit y ejecute gdb normalmente

+0

Gracias, esto era precisamente lo que estaba buscando. Estaba buscando en una aplicación multiproceso con una pila de llamadas larga y esto es perfecto para esas trazas inversas. –

Cuestiones relacionadas