Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

#debugpy becomes unresponsive after rapid breakpoint suspend/resume cycles in multithreaded Python programs

Abierto
#2,048 3 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
45/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Tranquilo
Stack tecnológico
python
Área
devtools

Línea de trabajo

Comienza con la reproducción multihilo mínima y sigue el manejo de breakpoints a través de pydevd_sys_monitoring._stop_on_breakpoint y _do_wait_suspend. Compara Suspend, las solicitudes rápidas de Continue, la limpieza del estado de los hilos y el orden de los eventos de DAP en ciclos repetidos. Se considera terminado cuando la sesión sigue respondiendo y los breakpoints continúan comportándose normalmente sin requerir un reinicio.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

bug

debugpy becomes unresponsive after rapid breakpoint suspend/resume cycles in multithreaded Python programs

Description

I found an issue where the debug session becomes unresponsive after repeatedly hitting a breakpoint and rapidly pressing F5 (Continue/Resume) in a multithreaded Python application.

The issue can be reproduced with a minimal example.

It does not appear to be specific to Python 3.14 free-threading, because the same behavior can also be reproduced on CPython 3.11.9.

The problem appears to be related to repeated breakpoint suspend/resume cycles and thread state handling inside debugpy/pydevd.

Environment

OS:
Windows 11

Debugger:
VS Code Python Debugger extension
debugpy: latest version

Python versions tested:

  • CPython 3.11.9
  • CPython 3.14.6
  • CPython 3.14.6 free-threaded build (python3.14t)

Minimal Reproduction

import threading
import time

def worker():
    while True:
        x = 1
        time.sleep(1)   # Put breakpoint here

for i in range(2):
    threading.Thread(target=worker).start()

while True:
    time.sleep(1)

Steps to Reproduce

  1. Open the script in VS Code.
  2. Set a breakpoint on time.sleep(1) inside worker().
  3. Start debugging with F5.
  4. When the breakpoint is hit, press F5 (Continue).
  5. Repeat rapid F5 Continue operations.
  6. After several suspend/resume cycles, the debugger becomes unresponsive.

Expected Behavior

Breakpoint suspend/resume cycles should continue normally.

Actual Behavior

After several rapid F5 Continue operations:

  • VS Code stops updating the current debug location.
  • Breakpoints no longer behave normally.
  • The debugger UI becomes stuck.
  • Restarting the debug session is required.

Technical Observation

Breakpoint handling reaches:

_pydevd_sys_monitoring._stop_on_breakpoint

and:

_do_wait_suspend()

The suspend path is entered successfully.

Possible affected areas:

  • pydevd suspend/resume state management
  • debugpy adapter DAP event ordering
  • handling of rapid continue requests
  • multithreaded breakpoint synchronization

Questions

Could this be related to a race condition in debugpy regarding:

  1. Rapid suspend/resume cycles?
  2. Multiple threads hitting the same breakpoint?
  3. Thread state cleanup after continue?
  4. DAP event ordering?
Lenguaje dominante
Python
Estrellas
2.5k
Forks
205
Merge medio
1 d 9 h
PR fusionados (30 d)
3

Preparar el entorno

Abrir en Codespaces

Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de microsoft/debugpy

Todos los issues de microsoft/debugpy

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.