jump to navigation

Depurando programas con gdb/lldb 13 noviembre, 2017

Posted by ubanov in Informática-Linux.
trackback

Me acabo de fijar la cantidad de tiempo que llevo sin escribir nada aquí… buff.

A ver si me pongo las pilas y cuento algunas de las cosas que estoy haciendo.

Hoy para empezar voy a dar un resumen muy breve de cómo depurar programas (C/C++) en Linux o en Mac (utilizando para ello los comandos gdb o lldb respectivamente).

Soy programador de la vieja escuela (es lo que tiene tener mi edad). A día de hoy todavía me siento cómodo programando en C (es lo que aprendí cuando era joven), y me siento cómodo utilizando linea de comando y programas de consola: compilo mis programas con gcc, edito con el vi y para depurar utilizo el lldb (soy de Mac).

consola_lldb

Por internet hay mogollón de guías de como depurar con gdb (y lldb funciona casi igual), así que no me escribir otra más. Simplemente voy a escribir un breve resumen de los comandos principales.

Para compilar un programa para poder ser depurado, compilar con:

$ gcc programa.c -o programa --debug

Y para depurarlo:

$ lldb ./programa

Y los comandos principales para debugger que yo utilizo (para que me sirva de autoresumen)

  • list x (o l x): mostrar un cacho de fuente, si no ponemos nada mostrará las siguiente líneas a las que se han mostrado anteriormente. Si x es un número será un número de línea (ej list 20). Y si no es número se puede listar un nombre de función (ej. list main)
  • break numero_linea (o b numero_linea): establecer un breakpoint en un número de linea determinado.
  • break delete numero_breakpoint (o br del numero_breakpoint): borrar un breakpoint determinado [en lldb]
  • delete numero_breakpoint: borrar un breakpoint determinado [en gdb]
  • run: ejecutar el programa (desde el principio) hasta que se pare en un breakpoint o pulsemos Ctrl+C
  • continue (o c): continuar la ejecución de un programa desde el punto que esté, hasta que se pare en un breakpoint o pulsemos Ctrl+C
  • step (o s): ejecutar 1 comando. Si la línea tiene una llamada a otra función o subrutina si se entrará en ella
  • next (o n): ejecutar 1 comando. Si la línea tiene una llamada a otra función o subrutina no se entrará en ella
  • print variable (o p variable): imprimir contenido de una variable

Un sitio interesante con resumen diferencias entre comandos gdb y comandos lldb:

https://lldb.llvm.org/lldb-gdb.html

Espero que a alguien más que a mi le sirva esto, y sino por lo menos me valdrá a mi de chuleta.

Comentarios»

No comments yet — be the first.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s

A %d blogueros les gusta esto: