pdb -p: depura procesos Python en ejecución

Publicado el: 09/10/2026
Tempo de leitura: 6 minutos
Depuración de un proceso Python en terminal con código

El depurador integrado pdb suele iniciarse antes de ejecutar un programa, mediante python -m pdb script.py o colocando breakpoint() en el código. Las versiones recientes de Python también permiten conectar el depurador a un proceso que ya está en ejecución con la opción -p. Esta capacidad resulta muy útil cuando un servicio, worker, automatización o script de larga duración se bloquea, entra en un bucle, consume CPU de forma inesperada o deja de responder sin finalizar.

Qué significa conectar el depurador

En una sesión tradicional se intenta reproducir el problema bajo control. Con la conexión a un proceso, se inspecciona el estado real que ya presenta el fallo. Primero se identifica el PID, después se ejecuta pdb contra ese proceso y finalmente se examinan la pila de llamadas y los objetos vivos.

Este enfoque reduce el tiempo de diagnóstico en fallos intermitentes. Algunos problemas solo aparecen tras horas de ejecución, con un elemento concreto de una cola, una carrera poco frecuente o una respuesta de red excepcional. Conectarse al proceso permite observar esa evidencia antes de perderla.

Cómo encontrar el PID correcto

El PID es el identificador numérico asignado por el sistema operativo. En Linux y macOS pueden utilizarse ps, pgrep y top. En Windows, el Administrador de tareas, PowerShell o una plataforma de monitorización ayudan a localizarlo.

ps aux | grep python
pgrep -af python

No elijas un proceso únicamente porque su comando contiene la palabra Python. Confirma la ruta de la aplicación, el usuario, los argumentos, el host y la hora de inicio. En producción suele haber muchos workers similares y conectar el proceso equivocado puede pausar trabajo no relacionado.

Comando básico de pdb -p

Después de confirmar el PID, el formato general es:

python -m pdb -p 12345

Sustituye 12345 por el identificador real. Es recomendable ejecutar el depurador con el mismo entorno y una versión compatible con la del proceso objetivo. El sistema operativo puede exigir el mismo usuario o privilegios autorizados.

Comandos esenciales dentro de pdb

where o w muestra la pila actual. up y down permiten desplazarse entre frames. list enseña las líneas cercanas. p expresión evalúa una expresión y pp expresión imprime estructuras complejas de forma más legible.

(Pdb) where
(Pdb) up
(Pdb) pp estado
(Pdb) p len(cola)
(Pdb) list

Evaluar expresiones puede ejecutar código. Propiedades, representaciones personalizadas y llamadas a funciones pueden modificar el estado. Durante un incidente, prioriza lecturas simples de variables locales, tamaños, indicadores y valores inmutables.

Diagnosticar bucles y consumo elevado de CPU

Cuando un proceso consume un núcleo completo, la pila suele revelar el bucle activo. Revisa la condición de salida, el dato que se está procesando, los contadores de reintento y las marcas de tiempo. Sube por los frames hasta llegar al código de la aplicación.

El bucle puede ser realmente infinito o repetir el mismo elemento fallido. Comprueba que los índices avanzan, que los mensajes se confirman, que las unidades de tiempo son correctas y que una excepción no se captura para reintentarse inmediatamente sin pausa.

Diagnosticar esperas y bloqueos

Un proceso aparentemente congelado puede estar esperando una operación de red, una consulta, un archivo, un subproceso, un lock, un evento o una cola. La pila ayuda a diferenciar una espera legítima de un deadlock. Identifica el recurso y quién debería liberarlo.

Para ampliar estos temas, consulta nuestras guías sobre queue.ShutDown, sys._is_gil_enabled, os.timerfd_create y contextlib.chdir.

Aplicaciones con threads y asyncio

En programas concurrentes, el frame visible no siempre corresponde a la causa. Un thread puede estar esperando un lock que posee otro. Una tarea asíncrona puede aguardar un futuro que nunca se completa.

Combina el depurador con volcados de threads, inspección de tareas, logs estructurados y métricas. No consideres que la primera línea observada demuestra la causa raíz. Sigue la propiedad de los recursos y las dependencias entre tareas.

Permisos y restricciones de plataforma

La conexión depende de mecanismos del sistema operativo. En Linux, políticas relacionadas con ptrace, namespaces, capacidades de contenedores y kernels endurecidos pueden impedirla. Windows y macOS tienen sus propios modelos de seguridad y limitaciones.

No evites estas protecciones sin autorización. Depurar otro proceso puede exponer memoria, credenciales y datos personales. En entornos empresariales, sigue el procedimiento de incidentes y registra el acceso.

Riesgos de seguridad y privacidad

Una sesión de depuración puede mostrar claves API, contraseñas, cookies, registros de clientes y configuración interna. No pegues la salida completa en tickets públicos ni canales abiertos. Recoge solo lo necesario, oculta valores sensibles y cierra la sesión cuanto antes.

La conexión también puede pausar o ralentizar el proceso. En un servicio replicado, retira temporalmente la instancia del balanceador cuando sea posible y verifica su recuperación al finalizar.

pdb frente a logs y observabilidad

Los logs registran eventos elegidos previamente. Las métricas muestran tendencias. Las trazas conectan operaciones entre componentes. El depurador vivo expone el estado actual, incluso variables que nunca se registraron.

Estas herramientas se complementan. Usa pdb -p como técnica específica, no como sustituto de timeouts, health checks, logging estructurado, tracing y alertas.

Preparar el código para el diagnóstico

Funciones pequeñas, nombres descriptivos, estado explícito y límites claros facilitan la lectura de la pila. Separa validación, transformación y efectos externos. Evita expresiones enormes que oculten varias operaciones.

Añade identificadores de correlación, reintentos limitados, timeouts y mensajes de error útiles. El objetivo es resolver la mayoría de incidentes mediante observabilidad y reservar la conexión en vivo para los casos difíciles.

Flujo operativo seguro

  1. Confirma el incidente, el host y los síntomas.
  2. Identifica el PID y el propietario del proceso.
  3. Comprueba si existe una réplica de menor riesgo.
  4. Conecta con python -m pdb -p PID.
  5. Inspecciona pila y valores sin modificar estado.
  6. Registra solo datos necesarios y no sensibles.
  7. Sal y verifica la salud del servicio.
  8. Convierte el hallazgo en corrección, prueba y mejora de observabilidad.

Compatibilidad y pruebas

Como esta capacidad es reciente y dependiente de plataforma, comprueba la versión instalada. Consulta la documentación oficial de pdb y la documentación de la línea de comandos. Practica primero con un proceso descartable.

Errores frecuentes

Los errores habituales incluyen usar el entorno equivocado, elegir mal el PID, ejecutar expresiones con efectos secundarios, dejar el proceso pausado, revelar secretos en capturas y asumir que un único frame demuestra la causa. También es un error corregir manualmente el proceso sin crear una solución permanente.

Conclusión

pdb -p permite inspeccionar un proceso Python en ejecución cuando reiniciarlo o reproducir el problema destruiría información valiosa. Puede revelar bucles, llamadas bloqueadas, deadlocks, entradas inesperadas y estados corruptos. Usado con autorización, controles operativos y una buena estrategia de observabilidad, es una herramienta poderosa para diagnosticar fallos complejos.

Compartilhe:

Facebook
WhatsApp
Twitter
LinkedIn

Contenido del artículo

    Artículos relacionados

    Código Python para representar fracciones exactas
    Python Avanzado
    Foto de perfil de Leandro Hirt da Academify

    fractions.from_number: convierte números en fracciones

    Aprende fractions.from_number en Python para convertir números en fracciones exactas, controlar precisión, validar entradas y evitar redondeos inesperados.

    Ler mais

    Tempo de leitura: 4 minutos
    09/10/2026
    Desarrollador configurando un servidor HTTPS y certificado TLS con Python
    Python Avanzado
    Foto de perfil de Leandro Hirt da Academify

    HTTPSServer: crea un servidor HTTPS local en Python

    Aprende HTTPSServer en Python para crear servicios HTTPS locales, configurar certificados, usar hilos y comprender sus límites.

    Ler mais

    Tempo de leitura: 4 minutos
    08/10/2026
    Archivos protegidos que representan extracción segura de TAR con Python
    Python Avanzado
    Foto de perfil de Leandro Hirt da Academify

    tarfile extraction_filter: extrae TAR con seguridad

    Aprende tarfile extraction_filter en Python para extraer archivos TAR con validación, seguridad y control de rutas.

    Ler mais

    Tempo de leitura: 6 minutos
    08/10/2026
    Código Python mostrando avisos controlados con catch_warnings
    Python Avanzado
    Foto de perfil de Leandro Hirt da Academify

    catch_warnings: captura warnings en pruebas Python

    Aprende catch_warnings en Python para capturar, probar y controlar avisos con filtros específicos y alcance seguro.

    Ler mais

    Tempo de leitura: 5 minutos
    07/10/2026
    Código Python que representa referencias persistentes de pickle
    Python Avanzado
    Foto de perfil de Leandro Hirt da Academify

    pickle persistent_id: serializa referencias externas

    Aprende pickle persistent_id en Python para referencias externas estables, validación, seguridad, rendimiento y compatibilidad.

    Ler mais

    Tempo de leitura: 5 minutos
    07/10/2026
    Código binario que representa buffers y vistas de memoria en Python
    Python Avanzado
    Foto de perfil de Leandro Hirt da Academify

    memoryview.count: cuenta valores sin copiar buffers

    Aprende memoryview.count en Python para contar bytes y valores en buffers sin copias, con formatos, límites y buenas prácticas.

    Ler mais

    Tempo de leitura: 6 minutos
    06/10/2026