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
ygid
, 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 porids
. La opciónids
es una lista de identificadores de hilos separada por espacios. Un valor especialall
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 determinadocondition
sólo para el número de hiloid
. watch expression thread id
-
Establece un punto de control definido por
expression
sólo para el número de hiloid
. 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