Paso a paso del programa C de subprocesos múltiples con el depurador de VSCode cambia el subproceso en cada paso.
El hilo donde salta el depurador ejecuta un código como este:
do {
rc = nanosleep(&rqtp, &rem);
rqtp = rem;
} while (rc < 0 && errno == EINTR);
La configuración de mi depurador es la siguiente: “versión”: “0.2.0”, “configuraciones”:[[
{
"name": "solid Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceRoot}/program",
"args": ["-a","-b"],
"stopAtEntry": true,
"cwd": "${workspaceRoot}",
"environment": [],
"externalConsole": true,
"linux": {
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
}
P1: ¿Cómo hago para que el depurador se quede con el hilo que se encontró con el punto de interrupción?
P2: ¿Cómo mantengo el foco en la pila de llamadas que pertenece a ese hilo?
Respuesta a P1: De acuerdo con este hilo SO, agregando set scheduler-locking on
to the gdb le permitirá permanecer en el mismo hilo cuando haga un solo paso.
No estoy seguro sobre Q2, pero esto debería darle lo que necesita para continuar. Creo que se muestra la pila de llamadas del hilo actual, pero no estoy seguro.
-
Gracias. Esto me estaba volviendo loco. ¿Cómo puedo configurar gdb o vscode para que esto se habilite automáticamente en cada sesión de gdb?
– jknight
25 oct 2022 a las 23:09
-
@jknight lo puso
~/.gdbinit
yo diría, de esa manera debería cargarse en cada sesión– leónkor
26 oct 2022 a las 12:31
-
Puse er allí pero hace que esta salida ‘Objetivo ‘Ninguno’ no puede admitir este comando’. Creo que ya tienes que estar conectado al programa. Además, me gustaría entender más acerca de por qué mi programa vomita totalmente en el ‘paso siguiente’ sin el bloqueo del programador habilitado. No hay indicios de lo que sucedió, solo el ‘cursor’ parece ir a la tierra de las tonterías. Esto es incluso con todas las señales configuradas en ‘nostop’, solo 1 punto de interrupción establecido, que solo 1 hilo golpea, y compilación de depuración. El cursor incluso retrocede. Estoy usando VSCode, así que tal vez haya un error en gdbmi. Los efectos del siguiente paso son realmente extraños.
– jknight
27 oct 2022 a las 15:14
Solo encontré una opción para hacer esto. En la consola de depuración de VS Code, cuando se detiene en un punto de interrupción, debe ejecutar el comando
-exec set scheduler-locking step
Desafortunadamente, no puedo encontrar cómo configurar el scheduler-locking
opción antes de iniciar la depuración. Entonces, pregunté sobre esto aquí.