2009-10-10 28 views
5

Cuando estoy trabajando en multithreads, ¿cómo puedo depurar para saber qué hilo causa un comportamiento anormal?Depuración de subprocesos C#

¿Puedo usar Permonitor para la depuración, o hay otras herramientas o recursos de depuración que están disponibles?

Respuesta

1

Puede usar Visual Studio para configurar puntos de interrupción en ciertos subprocesos. Consulte here y here para saber cómo hacerlo.

1

Depende de lo qué se refiere con "comportamiento anormal" ...

para la mayoría de las veces, el depurador de Visual Studio debería ser suficiente. las ventanas Threads y CallStack le darán mucha información sobre lo que está sucediendo.

para cosas pesadas se puede usar WinDbg + SOS. Lea acerca de los comandos! threads,! threadpool y! funaway.

+0

Por lo general, sería más cómodo utilizar estos comandos a través del panel Intermedio en VS (no es necesario iniciar WinDbg como un proceso separado). –

+0

@opc: tiene razón siempre que no necesite los otros comandos de WinDbg. que no siempre es el caso. –

1

solamente si usted tiene varios hilos del mismo tipo * que podría modificar el código para ejecutar uno de cada tipo de hilo (o tal vez poner en el archivo de configuración de la aplicación para que pueda cambiarlo rápidamente durante la depuración).

Si la aplicación aún se comporta mal, entonces sabrá que se trata de una interacción entre los diferentes tipos de subprocesos que están causando el problema. Si no es así, podría ser que hay algún recurso que no has enhebrado correctamente (por ejemplo).

Lo que trato de decir es que simplifique su aplicación hasta el punto en que está utilizando la cantidad mínima de hilos para seguir siendo su diseño original.

* No es la mejor palabra para usar, pero por ejemplo si desovar 10 hilos para hacer frente a/S de archivos sólo se desovar 1.

+0

Muy buena sugerencia Sr. Chris. – user186973

1

¿Cómo se define el comportamiento anormal? ¿Sería eso una excepción? No estoy seguro si esto lo ayudará, pero lo que a menudo hago es nombrar el objeto de la secuencia cuando lo creo, luego si encuentro una excepción o si existen ciertos criterios, escribo en el registro de eventos. Incluyo la hora, el nombre de la aplicación, el nombre del hilo y la información de excepción. No lo uso para la depuración, lo uso si un usuario se queja de un comportamiento extraño o informa un error. Entonces puedo regresar y obtener información al respecto.

Cuestiones relacionadas