Respuesta

3

Generalmente, congelo los otros hilos haciendo clic derecho en el panel de hilos. Sin embargo, no sé si esto es sensato o no.

6

Es el valor predeterminado porque ejecutar el programa en el depurador no debería cambiar los resultados del programa, supongo.

Cuando el programa se ejecuta "en vivo", cambia constantemente entre subprocesos, por lo que si el depurador no hiciera lo mismo, el programa se comportaría de manera diferente.

En cualquier caso, la única manera que conozco de evitarlo es abrir la ventana de Subprocesos, hacer clic con el botón secundario en todos los otros subprocesos que el actual y seleccionar freeze. (Recuerda thaw ellos otra vez)

+0

Esto tiene sentido ... pero no cambia el hecho de que es muy molesto. :) Sería útil para la depuración si MS agregara una opción de configuración para permanecer dentro del hilo actual cuando se golpea el punto de interrupción ... de esa manera, la lógica que se está ejecutando en ese momento puede ser depurada, sin el engorro ni la asimetría asociada. Retraso al depurar un programa con subprocesos congelados. – Jon

+0

No estoy en desacuerdo, pero un contra argumento obvio es que cuando está depurando, tampoco está trabajando con su aplicación de producción real, porque es probable que no haya compilado su aplicación de versión de depuración con optimizaciones. Si está buscando un problema de lógica, tener un mejor control del depurador es mucho más útil que ser pedantemente correcto. – stu

19

Cuando dices, "al depurar un determinado hilo, Visual Studio simplemente saltará aleatoriamente a diferentes hilos", ¿quieres decir que al pasar por el código en un hilo en particular, puedes golpear un punto de interrupción en un hilo diferente?

Si es así, puede utilizar la ventana de Tema a 'congelar' las discusiones que no sea el que usted está interesado en la depuración:

De http://msdn.microsoft.com/en-us/library/w15yf86f.aspx:

Desde la ventana Temas, puede establecer el hilo activo. Además, usted puede congelar o descongelar la ejecución de cada hilo individual. Congelar impide la ejecución de un hilo. Descongelarlo permite que continúe. Dos barras azules verticales identifican una hebra congelada.

La compatibilidad con esto puede depender de la versión de Visual Studio que tenga (por ejemplo, no creo que las versiones Express admitan la ventana Thread).

4

Todas las respuestas aquí hablan sobre la congelación de los hilos, pero se vuelve engorrosa cuando hay muchas, y no sabes cuál congelar. Encontré un truco más fácil.

Cuando un punto de interrupción es golpeado por un hilo i, y decir j, k, etc. van a golpear a la misma en un tiempo, y luego desactivar el punto de interrupción temporal e iniciar la depuración de hilo i . Veo que el depurador no salta a los otros hilos, ya que para esos hilos no hay un punto de quiebre en el que entrar. Habilite el punto de interrupción cuando termine de depurar.

Cuestiones relacionadas