Red Hat Training

A Red Hat training course is available for RHEL 8

8.7. Depuración de programas bifurcados o roscados con GDB

Algunos programas utilizan bifurcaciones o hilos para conseguir una ejecución paralela del código. La depuración de múltiples rutas de ejecución simultáneas requiere consideraciones especiales.

Requisitos previos

  • Debes entender los conceptos de bifurcación de procesos e hilos.

Depuración de programas bifurcados con GDB

La bifurcación es una situación en la que un programa (parent) crea una copia independiente de sí mismo (child). Utilice los siguientes ajustes y comandos para afectar a lo que hace GDB cuando se produce una bifurcación:

  • El ajuste follow-fork-mode controla si GDB sigue al padre o al hijo después de la bifurcación.

    set follow-fork-mode parent
    Después de una bifurcación, depurar el proceso padre. Esta es la opción por defecto.
    set follow-fork-mode child
    Después de una bifurcación, depura el proceso hijo.
    show follow-fork-mode
    Muestra la configuración actual de follow-fork-mode.
  • El ajuste set detach-on-fork controla si el GDB mantiene el control del otro proceso (no seguido) o lo deja correr.

    set detach-on-fork on
    El proceso que no se sigue (según el valor de follow-fork-mode) se separa y se ejecuta de forma independiente. Este es el valor por defecto.
    set detach-on-fork off
    GDB mantiene el control de ambos procesos. El proceso que se sigue (dependiendo del valor de follow-fork-mode) se depura como siempre, mientras que el otro se suspende.
    show detach-on-fork
    Muestra la configuración actual de detach-on-fork.

Depuración de programas roscados con GDB

GDB tiene la capacidad de depurar hilos individuales, y de manipularlos y examinarlos independientemente. Para hacer que GDB detenga sólo el hilo que se examina, utilice los comandos set non-stop on y set target-async on. Puede añadir estos comandos al archivo .gdbinit. Después de activar esa funcionalidad, GDB está listo para realizar la depuración de hilos.

GDB utiliza el concepto de current thread. Por defecto, los comandos se aplican sólo al hilo actual.

info threads
Muestra una lista de hilos con sus números id y gid, indicando el hilo actual.
thread id
Establece el hilo con el id especificado como el hilo actual.
thread apply ids command
Aplicar el comando command a todos los hilos listados por ids. La opción ids es una lista de identificadores de hilos separada por espacios. Un valor especial all aplica el comando a todos los hilos.
break location thread id if condition
Establecer un punto de interrupción en un determinado location con un determinado condition sólo para el número de hilo id.
watch expression thread id
Establece un punto de control definido por expression sólo para el número de hilo id.
command&
Ejecuta el comando command y vuelve inmediatamente al prompt de gdb (gdb), continuando cualquier ejecución de código en segundo plano.
interrupt
Detener la ejecución en el fondo.

Recursos adicionales

  • Depuración con GDB
  • Depuración con GDB