2010-08-06 17 views
20

¿Es posible romper un único hilo en Visual Studio, mientras que otros hilos continuarán su ejecución?Rompiendo un único hilo

Tengo un hilo de fondo que hace el envío/recepción de datos simple, que me gustaría que ocurriera, mientras paso por mi código en otro hilo.

+0

1 buena pregunta. Me gustaría conocerme a mí mismo ... –

+2

Descargo de responsabilidad :-) no se ha comprobado la documentación, pero la forma en que se comporta (VS 2008 sin duda) es que un descanso detendrá todos los hilos en el proceso, y cada vez que paso, todos los hilos tendrán la oportunidad de reanudar hasta el fin del paso Luego selecciona el hilo por el que desea pasar. –

+0

Kev, supongo que tienes razón. Me pregunto cuál podría ser la razón para no implementar este escenario ... –

Respuesta

12

abra la vista de subprocesos (Depurar-> Windows-> Subprocesos), haga clic con el botón derecho en la secuencia que desea suspender, seleccione 'Congelar'. Seleccione 'Descongelar' para volver a ponerlo en estado de ejecución.

+3

La ventana de subprocesos está inactiva mientras se ejecuta el programa. Y 'Thaw' realmente no lo pone en estado de ejecución, solo significa que este subproceso se ejecutará (entre otros) después de que lanzaré un programa desde el punto de interrupción. Lo que quiero hacer es recorrer un hilo, mientras que otros se ejecutan en segundo plano. –

+0

Ya veo. Como otros señalaron, no piensen que se puede hacer en el IDE. Puede simultae sacando ese hilo del código y ejecutarlo como un proceso separado. No es fácil, sin embargo, si tiene que comunicarse mucho con los otros hilos. Su mejor apuesta es el registro extenso. – stijn

0

Todo lo que puedo encontrar para esto, es que se puede cambiar el comportamiento en un nivel de proceso by the setting

  • Herramientas - Opciones - Depuración - General - Romper todos los procesos cuando un proceso rompe

pero no en una base de subprocesos.

7

En general, es imposible, pero hay algunas cosas que pueden funcionar para escenarios específicos.

Solución básica Como ya se mencionó, la repetición de la secuencia: Freeze, Reanudar, (espera), Pausa, deshielo, Paso debe resultar en el comportamiento que usted describe, dando otros temas la posibilidad de correr en segundo plano mientras que el hilo objetivo se detiene.

Este enfoque tiene al menos dos cuestiones:

  • Es bastante tedioso
  • Sus hilos fondo se suspenderá en cualquier momento se detuvo el depurador.

Mejoras

El primer problema puede ser abordado mediante un procedimiento diferente: Emitir una Thread.Sleep(10000) en la ventana Inmediato, manteniendo efectivamente el hilo centrado ocupada, mientras que los otros hilos se ejecutan normalmente. Incluso podría vincular ese comando a una macro.

El segundo problema solo puede abordarse mediante un enfoque que no necesita pausar el depurador. ¿Pero cómo examinaríamos el estado cuando la sesión no está en pausa? Ahí es donde entra IntelliTrace, pero es posible que deba crear custom IntelliTrace events. El inconveniente de este enfoque es que no puede modificar manualmente el estado en pleno vuelo.

1

Establezca un contador que haga una para cada hilo creado y luego configure su punto de corte para interrumpir una condición y elija un valor para ese contador. No creo que esto funcione en todos los casos, especialmente PLINQ, pero debería ser factible en muchas situaciones.

Cuestiones relacionadas