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

Debugger: first Step Over after Hot Reload inside the patched method's active frame runs away — process runs to completion, re-bound breakpoint never hit (IncompleteStep)

Abierto
#9,501 1 comentario 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
46/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Tranquilo
Stack tecnológico
csharp, typescript, vscode

Línea de trabajo

Empieza reproduciendo el escenario con Calculator.cs y la prueba de xUnit Add_ReturnsSum en una sesión de depuración nueva de VS Code, siguiendo la secuencia de Hot Reload, Jump to Cursor y el primer Step Over. Inspecciona el trace de DAP alrededor de next, continued, stopped y exited, junto con el evento IncompleteStep de vsdbg. Se considera terminado cuando el primer Step Over posterior a la recarga se detiene en código del usuario, idealmente en la línea 13, sin finalizar la sesión.

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

Descripción

Debugger

Environment

  • VS Code 1.127.0
  • C# extension 2.140.9 (also observed with C# Dev Kit 3.20.199 installed)
  • .NET SDK 10.0.300, target net10.0
  • macOS 26.5 (arm64)
  • Debugger: vsdbg (default coreclr adapter)

Summary

When the debugger is paused inside a method that has just been hot-patched (Hot Reload applied while stopped in that frame), and no step command has been issued earlier in the session, the first Step Over silently loses the stepper: instead of stopping on the next line, the process resumes and runs to completion. The breakpoint that was re-bound after the reload never fires, and the debug session ends. vsdbg emits its own VS/Diagnostics/Debugger/IncompleteStep telemetry event at that moment.

Reproduced 3/3 in fresh sessions clicking the UI manually; the DAP trace confirms next → continued → no stopped → exited.

Repro

Calculator.cs:

public class Calculator
{
    public int Add(int a, int b)
    {
        int result = a - b; // line 12 — deliberately wrong
        return result;      // line 13
    }
}

xUnit test:

[Fact]
public void Add_ReturnsSum() => Assert.Equal(5, new Calculator().Add(2, 3));

Steps (all in the UI, fresh debug session, no stepping before step 4):

  1. Set a breakpoint on line 13 (return result;). Debug the test; it stops on line 13 with a=2 b=3 result=-1.
  2. While paused: edit line 12 to int result = a + b; and save.
  3. Click Hot Reload (the flame button in the floating debug toolbar). The reload applies cleanly (no ENC errors).
  4. Right-click line 12 → Jump to Cursor (Set Next Statement back into the patched method). The debugger stops on line 12 as expected.
  5. Press Step Over (F10) once.

Expected

Stop on line 13 (or at worst anywhere in user code), session still paused.

Actual

The debug session ends: the step escapes, the process runs to completion (exit code 0), the breakpoint on line 13 never fires. The DAP trace shows next → continued → exited with no stopped event in between, and vsdbg logs a VS/Diagnostics/Debugger/IncompleteStep telemetry event.

Additional observations

  • Does not reproduce if at least one Step of any kind was executed earlier in the same session, before the Hot Reload (2/2). A "warmed-up" stepper survives; then a different (milder) issue shows instead: the first post-reload step in the patched frame moves the instruction pointer but does not actually execute the source line (locals keep their previous values); from the second step onwards the new body executes normally. I can file that separately if useful.
  • Inserting a 5-second delay between the reload and the jump/step does not help — this is not a race with delta application.
  • Without any Hot Reload involved, repeated Jump-to-Cursor + Step Over rounds in the same paused frame are fully deterministic — the issue is specific to stepping in the (stale) active frame of an EnC-patched method.
Lenguaje dominante
TypeScript
Estrellas
3.1k
Forks
738
Merge medio
19 h 24 min
PR fusionados (30 d)
48

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 dotnet/vscode-csharp

Todos los issues de dotnet/vscode-csharp

Issues similares

Más issues de TypeScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.