Tengo una aplicación con 4 hilos que funcionan con el mismo código. Sin embargo, cuando paso salta entre los diferentes hilos. ¿Cómo puedo bloquearlo en un hilo para que los otros hilos se ignoren para la depuración?
c#
multithreading
visual-studio-2010
Oskar Kjellin
fuente
fuente
Respuestas:
Si.
En la ventana Subprocesos (Depuración -> Windows -> Subprocesos) haga clic con el botón derecho en el subproceso que desee y seleccione "cambiar a subproceso".
También puede elegir "congelar" en los hilos que no desea depurar para evitar que se ejecuten. Sin embargo, no olvide "descongelarlos" si espera que trabajen.
Otras lecturas .
fuente
Un solo paso a través de un solo hilo parece estar solucionado en su mayoría en VS 2012 (con algunas advertencias que puede ver en mi enlace a continuación). Los puntos de interrupción son un dolor.
Congelar y descongelar hilos es la solución habitual, como han dicho las respuestas anteriores, pero es tedioso y puede causar bloqueos cuando su hilo espera en otro hilo que está congelado. Puede ser difícil recuperarse sin perder su lugar en su hilo de interés.
Otro flujo de trabajo útil es aplicar un filtro de hilo en sus puntos de interrupción, también indicado en algunas de las respuestas:
Cree un punto de interrupción, haga clic con el botón derecho en el punto de interrupción, haga clic en Filtro e ingrese ThreadId = 7740 (su id. De hilo desde la ventana de hilos).
Esto puede ser muy tedioso.
Mi sugerencia a Microsoft es arreglar un solo paso (y variaciones de él) para nunca cambiar los hilos a menos que se toque un punto de interrupción explícito en otro hilo. También deberían agregar un acceso directo (tal vez Ctrl-F9) para crear un punto de interrupción con el id de hilo actual como filtro. Esto haría que el segundo flujo de trabajo sea mucho más conveniente.
Vote la sugerencia si está de acuerdo en que esto sería útil, o agregue sus propias sugerencias:
https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/8543248-make-the-debugger-stick-to-the-current-thread-inst
fuente
También puede poner un punto de interrupción condicional en su código y poner
thread.Id == [someValue]
oThread.Name == "[Somename]"
en la condición de punto de interrupción ...fuente
Existe una solución mucho más rápida para casos simples: vea los comentarios en el enlace de Steve.
Entonces, en mi caso, una vez que los diversos hilos comenzaron a llegar a mi punto de interrupción, solo presioné Continuar varias veces hasta que identifiqué la llamada que estaba buscando, luego eliminé el punto de interrupción y pasé por el resto del código mientras permanecía en el mismo hilo sin interferencia de el resto de ellos.
Obviamente, esto se convierte en un problema si tiene múltiples puntos de interrupción que desea mantener, etc., pero nuevamente, en casos simples, esto es mucho más fácil de hacer.
fuente
Esto se parece mucho a un problema muy similar en Visual Studio 2008 SP1. Se solucionó con una revisión posterior al SP. Pero hay otra evidencia de que la revisión no se incorporó a la base del código, este elemento de comentarios también fue un problema. No es inusual que las revisiones no se vuelvan a integrar.
No hay un elemento de comentarios que describa exactamente su problema, al menos que pueda encontrar. Te recomiendo que archives uno. Dado el problema habitual con errores de reproducción como este, le recomiendo encarecidamente que incluya un proyecto de reproducción que muestre este problema con instrucciones sobre cómo reproducir el problema.
Hay una especie de solución alternativa para su problema, puede ir a Debug + Windows + Threads, hacer clic con el botón derecho en los hilos que no desea depurar y seleccionar Congelar. No olvides descongelarlos más tarde.
Estos errores se corrigieron nuevamente en Visual Studio 2010 Service Pack 1.
fuente
Estoy usando Visual Studio Professional 2017, y uso la ventana Subprocesos para congelar y descongelar selectivamente los subprocesos. Por lo general, tengo varios subprocesos del mismo código y solo quiero congelarlos, no otros. De hecho, me gusta la ventana de MS Threads porque puedo seleccionar un subconjunto de hilos para congelar. Agrupo los hilos por nombre y luego puedo congelar todos los que ejecutan el mismo código que estoy depurando mientras dejo que se ejecuten los hilos restantes. Intenté usar la extensión Erwin Mayer, y funcionó muy bien, pero congeló todos los hilos excepto el que estoy ejecutando, y a veces me encuentro en una situación en la que la depuración no alcanza el punto de interrupción, creo que debería, entonces porque todos otros hilos se detienen y la aplicación parece detenida. Al presionar el botón de pausa, y al descongelar hilos en la ventana de hilos se soluciona ese problema.
fuente
7 trucos menos conocidos para la depuración en Visual Studio
fuente