2010-10-10 17 views
93

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?Visual Studio, depurar uno de los múltiples hilos

+0

¿qué versión de Visual Studio estás usando? Express, Pro, Ultimate ...? @ Marcos – Mark

+0

estoy usando última –

+0

que acceder a la jeffamaphone's ayudará y tal vez esto también para obtener información adicional para cambiar al otro hilo durante la depuración http://msdn.microsoft.com/en-us/library/bb157786.aspx – Mark

Respuesta

85

Sí.

En la ventana de Hilos (Depurar -> Windows -> Hilos) haga clic derecho en el hilo que desea y seleccione "cambiar a hilo".

También puede elegir "congelar" en los subprocesos que no desea depurar para evitar que se ejecuten. Sin embargo, no olvide "descongelarlos" si espera que trabajen.

Further reading.

+14

I 'estoy confundido. Es la respuesta "No se puede hacer?" La pregunta pregunta cómo permanecer bloqueado a un hilo en particular para que el depurador no salte entre ellos. Cambiar a un hilo está bien, pero tan pronto como otro hilo hace algo, el depurador salta hacia él. Si no puedo congelar el otro hilo porque necesita hacer algo, ¿cómo puedo mantener el bloqueo del hilo que me preocupa? – bubbleking

+0

Ingresos: | siempre tiene que hacer clic en cambiar a, cada vez que sucede algo – deadManN

9

También puede poner un punto de interrupción condicional en el código y poner el thread.Id == [someValue]Thread.Name == "[Somename]" o en la condición de punto de ruptura ...

+0

Gracias Charles, eso fue útil (no sabía que podía hacer eso). Sin embargo, la manera más eficiente de depurarme es la que escribió jeffamaphone porque no conozco el nombre antes de que llegue al punto de interrupción y veo algunos valores –

2

Esto se parece mucho a un problema muy similar en Visual Studio     2008 SP1. Se corrigió con una revisión post-SP. Pero hay otra evidencia de que la revisión no se incorporó a la base de código, este feedback item también fue un problema. No es inusual que las revisiones no se integren nuevamente.

No hay un comentario que describa exactamente su problema, al menos que yo pueda encontrar. Te recomendaría que archivas uno. Dado el problema habitual de reproducir errores 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 solución para su problema, puede ir a Debug + Windows + Threads, haga clic derecho en los hilos que no quiere depurar y seleccione Congelar. No te olvides de descongelarlos más tarde.

Estos errores fueron corregidos de nuevo en Visual Studio 2010 Service Pack 1.

14

paso a paso individual a través de un solo hilo parece estar fijo sobre todo en VS 2012 (con algunas advertencias se puede ver en mi enlace más abajo). Los puntos de interrupción son un dolor.

Congelar y descongelar los hilos es la solución habitual, como han afirmado las respuestas anteriores, pero es tediosa y puede causar bloqueos cuando el hilo espera en otro hilo que está congelado. Puede ser difícil recuperarse de estos sin perder su lugar en su hilo de interés.

otro flujo de trabajo útil es aplicar un filtro de hilo en los puntos de interrupción, también declaró en algunas de las respuestas:

Crear un punto de interrupción, haga clic derecho en el punto de interrupción, haga clic en Filtro, y entrar ThreadId = 7740 (el hilo id de la ventana de hilos).

Esto puede ser muy tedioso.

Mi sugerencia para Microsoft es corregir el escalonamiento simple (y sus variaciones) para nunca cambiar los hilos a menos que se golpee un punto de quiebre explícito en otro hilo. También deberían agregar un atajo (tal vez Ctrl-F9) para crear un punto de interrupción con el ID del hilo actual como su filtro. Esto haría que el segundo flujo de trabajo sea mucho más conveniente.

votar hasta la sugerencia si está de acuerdo que esto sería útil, o añadir sus propias sugerencias: existe

https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/8543248-make-the-debugger-stick-to-the-current-thread-inst

+0

"El simple paso a través de un solo hilo parece estar principalmente solucionado en VS 2012" - no realmente, todavía está roto en VS2017. – user626528

0

Una solución mucho más rápida para los casos simples - ver comentarios en enlace de Steve.

el depurador solo completará un paso en el subproceso desde el que se originó el paso. Por lo tanto, si llega a un punto de interrupción, lo deshabilita y luego comienza a avanzar, no debe detenerse en un hilo diferente. Si usted tiene otros puntos de interrupción en la aplicación y otro hilo golpea a uno, entonces usted será la depuración en el estado de rosca mixta como se describe

Así que en mi caso una vez que los diversos hilos comenzaron a golpear mi punto de interrupción me acaba de golpear Continuar unos pocos veces hasta que identifiqué la llamada que estaba buscando, luego eliminé el punto de interrupción y di un paso al resto del código mientras permanecía en el mismo subproceso sin interferencia del resto de ellos.

Esto, obviamente, se convierte en un problema si tiene múltiples puntos de interrupción que desea mantener, etc., pero nuevamente, para casos simples, esto es mucho más fácil de hacer.

Cuestiones relacionadas