¿Cómo resaltar y colorear la salida de gdb durante la depuración interactiva?

StackOverflow https://stackoverflow.com/questions/209534

  •  03-07-2019
  •  | 
  •  

Pregunta

Por favor, no responda. Debería usar ddd, nemiver, emacs, vim o cualquier otro front-end, prefiero gdb tal como es, pero me gustaría ver su salida con algunos colores de terminal.

¿Fue útil?

Solución

.gdbinit

Puedes modificar tu ~ / .gdbinit para tener colores. Puede usar .gdbinit de mammon, que está disponible aquí:

https://github.com/gdbinit/gdbinit

También puedes ajustarlo todo lo que quieras. Encontré esto gracias a esta respuesta SO . Aquí está el tipo de salida que puede obtener:

. gdbinit

También hay un repositorio de GitHub disponible: https://github.com/gdbinit/Gdbinit

En una nota al margen, la misma idea también se aplicada a lldb .

Panel de GDB

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

 Panel de GDB

(void) walker

Otro proyecto similar utiliza el soporte Python de GDB para proporcionar más extensibilidad, así que vale la pena echarle un vistazo: https: // github .com / dholm / voidwalker

@dholm también proporciona su propio .gdbinit inspirado del anterior.

(void) walker

pwndbg

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

  

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

     
      
  • velocidad
  •   
  • Resistencia
  •   
  • Código limpio
  •   

Proporciona comandos para admitir la depuración y el desarrollo de exploits similares a los de PEDA, y una mejor visualización (aunque este no es el enfoque principal del proyecto). El software aún está en desarrollo y aún no se ha lanzado correctamente.

 pwndbg

voltron

El proyecto dice:

  

Voltron es una interfaz de usuario de depurador extensible para hackers. Te permite   adjunte vistas de utilidad que se ejecutan en otros terminales a su depurador (LLDB   o GDB), que muestra información útil como el desmontaje, la pila   contenidos, valores de registro, etc, mientras que todavía le da el mismo   CLI del depurador al que está acostumbrado.

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

 voltron

GEF

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

  

Está destinado a ser utilizado principalmente por explotadores e ingenieros inversos, para   Proporcionar funciones adicionales a GDB utilizando la API de Python para ayudar   durante el proceso de análisis dinámico y desarrollo de exploits.

 GEF

Otros consejos

No son colores, pero considere gui de texto de gdb. Hace una gran diferencia en la utilidad de gdb.

Puede iniciarlo con:

gdb -tui executable.out

Captura de pantalla:

ingrese la descripción de la imagen aquí

Como puede ver, las características principales son:

  • muestra la línea de la fuente en la que estamos y las líneas circundantes
  • muestra puntos de interrupción

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

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

  1. Solicitud coloreada a través de " establecer solicitud " ;. Por ejemplo, haga que el mensaje aparezca en negrita y rojo:

    set prompt \ 033 [1; 31m (gdb) \ 033 [m

    o haga que la solicitud tenga una nueva forma, negrita y roja:

    set prompt \ 033 [01; 31m \ n \ n ################################ ##### > \ 033 [0m

     ingrese la descripción de la imagen aquí

  2. Comandos coloreados a través de ganchos

  3. resaltado de sintaxis coloreada de la " lista " comando.

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

" Beautify GDB " ;, 12 de mayo de 2010 (a través de archive.org)

" resaltado sintáctico de sintaxis GDB " ; 15 de mayo de 2010 (a través de archive.org)

#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 es compatible con TUI, hack de 'modo de usuario'.

Encontramos la parte principal aquí y lo modifiqué un poco. Necesita resaltado, c ++ filt. Si los colores se estropean, emita el comando re.

cgdb es mucho mejor que gdb -tui

Limpio, acabo de encontrar este truco usando colout: https: / /github.com/nojhan/colout/blob/master/colout/example.gdbinit

antes - después de

Quería resaltar lo siguiente: enfatizar las líneas de un seguimiento de pila que pertenecen a mis archivos de origen (en lugar de bibliotecas).

La solución fue usar gdb-python (en MSYS; en Linux típicamente gdb ya viene con Python incorporado), enganche backtrace , use

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

Luego procese stack_trace con las expresiones regulares de Python e imprímalas. Los colores llamativos y otros se logran 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)

Otra buena combinación de colores está dada por esta configuración . Facilita la inspección de los backtraces mucho más. Para usarlo, simplemente guarde ese archivo como ~ / .gdbinit y ejecute gdb normalmente

¡Nuevo en el próximo GDB 8.3!

https: / /sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob;f=gdb/NEWS

  

El estilo de terminal ahora está disponible para la CLI y la TUI. Fuente GNU   Highlight también se puede usar para proporcionar estilo al código fuente   fragmentos Consulte el " establecer estilo " comandos, a continuación, para obtener más información.

 captura de pantalla de gdb 8.2.91.20190401-23.fc30

puedes obtener los colores que quieras;

# 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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top