2009-10-13 15 views
5

Estoy usando el analizador de registro de Microsoft en un servicio de Windows. El programa funciona en una página web normal, pero cuando pongo el código en un servicio de Windows, no funciona. Puse Breakbreakts en el servicio de Windows, pero cuando ejecuto el código, el programa no se detiene en el punto de interrupción. Así que a través de mi solución de problemas reduje el problema al software Log Parser y a Linq. Entonces, Linq o el software de análisis de registro está creando el problema. tienen alguna idea?Cuál es la mejor manera de depurar un programa de servicio de Windows en Visual Studio 2008

Respuesta

2

He hecho esto de muchas maneras en el pasado dependiendo de cómo se ejecuta el programa. Creo que la manera más fácil se hace con una directiva de preprocesador si #DEBUG alrededor del depurador. Launch() de esa manera, cuando haya construido el proyecto optimizado, la llamada Debugger.Launch() no se compilará en el ensamblado.

Una forma en que también hemos hecho esta tarea es con System.Windows.Forms.MessageBox.Show ("attach") que nos permitió conectar manualmente al depurador cada vez que se mostraba el cuadro de diálogo "adjuntar".

La última manera que no prefiero es cambiar el comportamiento de su servicio en función de los parámetros de línea de comando pasados. Básicamente optar por NO iniciar los servicios utilizando ServiceBase. Ejecutar cada vez que se dispara un parámetro, pero llamar a una clase que encapsula el comportamiento/función principal del servicio.

+1

Re el último punto - Creo que también puede comprobar 'Environment.UserInteractive' para esto. –

2

¿Desea depurar el método OnStart? De ser así, puede usar el método System.Diagnostics.Debugger.Launch() o System.Diagnostics.Debugger.Break() para tener la oportunidad de conectar el depurador mientras se está ejecutando el método de inicio, de lo contrario, siempre se retrasará con la instalación del depurador.

2

Creo que la sugerencia de fat cat de conectar su depurador al proceso de servicio parece correcto. Si eso aún no funciona, intente usar Debug.WriteLine y DebugView.

Cuestiones relacionadas