depuración de aplicaciones en visual studio

49
Depuración de aplicaciones .Net en Visual Studio Debugging Tactics

Upload: javier-hermoso-blanco

Post on 17-Jul-2015

304 views

Category:

Software


4 download

TRANSCRIPT

Depuración de aplicaciones .Net en Visual Studio

Debugging Tactics

Contenidos

• Contexto de depuración en Visual Studio.• Ciclo de desarrollo

• Introducción Windows y .Net.

• ¿Qué es .net?

• Correspondencia entre .net y Visual Studio.

• El IDE de visual studio.

• Configuración de Depuración en Visual Studio

• Herramientas de depuración Visual Studio.

• Como depurar en Visual Studio.

Ciclo de desarrollo

De bugging is twice as hard as writing the code in the firstplace.Therefore if you write the code as cleacerly as possible, you are by definition, not Smart enough to debug it.

Brian Kernighan

Depurar código tiene como objetivo encontrar las causas de un problema.

El uso de técnicas de TDD incrementa el tiempo de desarrollo por 2 pero reduce el tiempo de debugging. (es cuestión de elegir como queremos que sea nuestro ciclo de desarrollo)

Introduccion Windows y .net

• En el entorno de Microsoft disponemos de 2 entornos de depuración.

• Windows debugging.• Orientado al debugging de

Aplicaciones nativas win32 y comprincipalmente drivers de dispositivos, productos office. VS. etc

• Visual Studio Debugging.• Orientado principalmente al

debugging de aplicaciones administradas .net

WindowsS.O.

Win32.Aplicaciones nativas.

Desarrollo de drivers y aplicaciones fuertemente

acopladas al sistema operativo.

Ejemplo: aplicaciones office y el propio

Visual Studio.

.NetPlataforma de desarrolloCLR + BCLApl. administradasEntorno de desarrollo oop tanto local como distribuido.Facilitar el despliguede aplicaciones. Integración Ejemplo: ERP. Juegos. Etc.

Que es .net?Las principales ventajas de hacer debugging en Visual Studio provienen realmente de estar utilizando .net.

• Plataforma de Desarrollo compuesta de• Entorno de Ejecución (Runtime)• Bibliotecas de Funcionalidad (Class Library)• Lenguajes de Programación• Compiladores• Herramientas de Desarrollo (IDE & Tools)• Guías de Arquitectura

• La evolución de la plataforma COM

¿Qué no es?• .NET no es un Sistema Operativo• .NET no es un Lenguaje de Programación• .NET no es un Entorno de Desarrollo• .NET no es un Servidor de Aplicaciones• .NET no es un producto empaquetado que se pueda comprar como tal

Visual studio correspondencia .net

IDE integrated development enviroment.

An integrated development environment (IDE) or interactive development environment is a software application that provides comprehensive facilities to computer programmers for software development. An IDE normally consists of a source code editor, build automation tools and a debugger. Most modern IDEs have intelligent code completion.

• Source: http://en.wikipedia.org/wiki/Integrated_development_environment

Contenidos

• Contexto de depuración.

• Configuración de depuración.• Herramientas del entorno de desarrollo.• Soluciones y proyectos• Problemas de carga de proyectos• Propiedades de la solución.• Propiedades del proyecto.• Propiedades del proyecto: Aplicación.• Propiedades del proyecto: Depuración.

• Propiedades de proyectos y soluciones.

• El IDE de visual studio.• Herramientas de depuración de visual studio.

Herramientas del entorno de desarrolloSugerencias para el entorno de desarrollo de 2010.

IDE

• Microsoft Visual Studio 2010, ediciones Premium o Ultimate.

• Microsoft Visual Studio 2010 Service Pack 1.

SDK.

• Windows x.y SDK

• Visual studio SDK, SDK sp1

Extensiones de la galería de visual studio.

• Stylecop

• FXCop

• PowerCommands for Visual Studio 2010

• Productivity power tools for visual studio

• Team founsdation server power tools

• Vsix explorer

• Nuget.

• GIT.

• Otras sugerencias:

• http://stackoverflow.com/questions/2767/recommended-add-ons-plugins-for-microsoft-visual-studio

• http://geekswithblogs.net/sdorman/archive/2014/10/05/favorite-visual-studio-extensions.aspx

Configuración de opciones VS

• Si tenemos 2 instancias abiertas de visual studio y modificamos la configuración de una de ellas es posible que la segunda no se actualize. Por lo que esta operativa solo se debería llevar a cabo con una única instancia de VS. En caso de que si se actualice puede ser debido a que el Registro haya almacenado la misma clave para ambas instancias lo que además es un comportamiento indeseable.

Soluciones y proyectos

• Soluciones y proyectos son los contenedores que permiten administra los elementos necesarios para la construcción de aplicaciones. Estos elementos son: Referencias (Dlls con las enlazar), Metadatos, Configuraciones de compilación, carpetas, archivos, etc.

• Las soluciones se definen en dos archivos los .sln y los .slu (metadatos y opciones del usuario de V.S. como la inclusión de nuevos elementos en la toolbox)

• Los proyectos permiten administrar de forma lógica sus componentes, compilarlos y depurarlos.

Problemas de carga de proyectos• Visual studio proporciona diversas plantillas de proyecto así como de solución o de elemento. Algunas de estas plantillas

de proyecto se instalan de forma opcional con SDKs específicos u otro tipo de extensiones como puede ser los proyectos de MVC. En algunos casos esto significa que si no tienes instalado la tecnología adecuada no podrás cargar el proyecto que la usa indicándote el Visual Studio que no ha sido capaz de cargar dicho proyecto marcándolo como “no disponible”.

• Para averiguar que tecnología, extensión o sdk debemos instalar podemos editar el fichero “.csproj” aprovechando que el mismo esta descargado.

• Al editarlo comprobamos que dicho fichero que solo es accesible si “descargamos” el proyecto es en realidad un fichero xml con el configuramos las características comportamiento del proyecto.

• Localizamos entonces el Global id del proyecto con el atributo xml <ProjectTypeGuids>

• Que nos proporciona un lista de globals Id asignados a los tipos de proyecto que intervienen en dicho proyecto.

• Después podemos consultar este en http://www.codeproject.com/Reference/720512/List-of-Visual-Studio-Project-Type-GUIDs o en http://www.mztools.com/articles/2008/mz2008017.aspx

• Y averiguar así que tecnología debemos incluir para poder cargar el proyecto.

• Importante muchas extensiones es conveniente instalarlas con el visual studio cerrado o en caso contrario nos obligara a reiniciarlo para poder hacer uso de las nuevas características incorporadas.

Propiedades de la solución

Acceso1. En el Explorador de soluciones, seleccione una

solución.2. Elija Páginas de propiedades en el menú Ver (view) o

sacar el menú contextual en el ítem de propiedades de la solución del explorador de soluciones.

Nos aparece un cuadro de dialogo con Las propiedades comunes a los proyectos y las propiedades de cada una de las configuraciones, Debug, Release etc. En la sección “Propiedades de configuración”. Para poder cambiar estas propiedades debemos ir al configuration manager con el botón o con el menú de “Build” la opción de configurationmanager. Aquí podemos establecer para cada configuración de compilación/Construcción cual es la plataforma para la que queremos compilar. De esta manera podemos hacer debuging en una plataforma hacer reléase en otra etc. También podemos incluir o no código con las directivas de compilación condicional. Y el orden en que queremos que se realice la compilación.

Configuration Manager

Por norma general es conveniente que en un producto a entregar todas las compilaciones coincidan en la plataforma que se desea entregar.Por defecto nos aparecerá x86 pero si deseamos contar con las ventajas de otras plataformas con x64 o itanium tenemos que añadirlas. Solo es necesario tener en cuenta que solo podemos añadirlas una única vez para todos los proyectos de la solución pero luego tenemos que seleccionarlas para cada proyecto. De esta forma podemos crear una serie de productos con diversas “releases” cada una de ellas orientadas a diferentes plataformas.NOTA: para compilar simultáneamente varias configuraciones podemos utilizar la compilación por lotes o batch compiling.

Propiedades del Proyecto: project designer

Para acceder a las propiedades del proyecto basta con hacer doble clicken la carpeta de propiedades o seleccionar con el menú contextual en el explorador de soluciones o en el menú de proyecto la opción “Propiedades”

Aparecera el dialogo de “Propiedades del proyecto”. Con diversas opciones en las Pestañas de la izquierda.

Las pestañas que ahora nos interesan son:

Aplicación, Compilar y Debug

Para cualquier duda sobre el significado de estas pestañas solo es necesario pulsar al tecla f1 para sacar la ayuda correspondiente.

NOTA: El dialogo de propiedades del proyecto también se conoce como Project Designer.

Propiedades del Proyecto: Aplicación.

• Entre las propiedades que nos interesan tenemos.

• El target framework que en vs2010 nos aparece por defecto el framework 4 cliente profile. El cual es un subconjunto de .netredistribuible el cual renuncia a algunas características de .net como son: ASP.NET, funcionalidad avanzada de Windows Communication Foundation (WCF) .NET Framework Data Provider para Oracle y la compilación por MSBuild.

• Igualmente el output type nos resultara de interés sobre todo para organizar la depuración de servicios Windows. Los cuales se establecen como Windows application pero que cambiaremos a Console application para facilitar su debuggin como veremos mas adelante.

Propiedades de build event

• Aquí podemos invocar aplicaciones o copiar resultados desde una carpeta a otra para facilitar el posterior despliegue de aplicaciones.

• Por ejemplo los proyectos con prism pueden copiar de la carpeta de ensamblados a la carpeta de búsqueda de los módulos del proyecto.

• O los proyectos de WCF pueden invocar a la utilidad de svcutil para generar los clientes.

• Estas invocaciones se pueden llevar a cabo en función del resultado de la compilación.

Propiedades de compilación.

• Elegimos la configuración de debugging y la plataforma sobre la que haremos el debug. (Gestionamos las configuraciones pero no establecemos cual es la configuración activa)

• Separados por comas podemos establecer los símbolos de compilación condicional para la configuración que hemos seleccionado previamente.

• Establecemos el warning level y aquellos códigos de warning de los que no queremos ser notificados.

• Para facilitar el debug es mejor NO activar la optimización de código.• Para asegurar la coherencia de todos los ensamblados es mejor dirigir el

camino de salida output path a una misma carpeta para todos los ensamblados que no correspondan a proyectos de aplicaciones web. Los cuales se dejaran en la carpeta por defecto bin\debug o bin\%configuración%

• En el dialogo de “Avanzado” comprobar que para la configuración de debugla opción debug info es “full”.

Ficheros PDBFuente : http://mariangemarcano.blogspot.com.es/2011/11/visual-studio-debugging-and-remote.html

La configuración “Debug” genera información de símbolos completa de símbolos sin optimización.

La configuración “Reléase” optimiza el código y genera solo los ficheros PDB pero no incluye el atributo “Debuggable” Por lo que el código fuente y los números de línea no serán visibles en una sesión de depuración pero la existencia del PDB permitirá que esta información sea utilizada por el stacktrace.

La optimización por su parte es eliminada por que este proceso reordena las instrucciones para obtener un código mas eficiente. Esta optimización se realiza en dos pasos cuando se obtiene el código msil y cuando se compila siendo en su mayor parte realizada por el JIT.

Los ficheros PDB con el atributo de debuggable son los que permiten realizar la depuración en remoto para lo cual ambas maquinas necesitan permisos de acceso mutuamente.

Otra característica interesante para hacer debugging de un ejecutable es crear un fichero con idéntico nombre que el ejecutable y tipo .ini con el siguiente código.

[.Net Framework Debugging Control]

GenerateTrackingInfo=1

AlloOptimized=0

Propiedades de Proyecto: Depurar

• Podemos establecer como ejecutamos el proyecto O si necesita ser ejecutado por otro proyecto de la solución. (módulos de prism)

• Podemos establecer los argumentos que pasaríamos si estuviéramos invocando la aplicación desde una consola.

• Podemos establecer si la ejecución se realiza en otra maquina o directorio.

• Establecemos si la ejecución de este proyecto va a usarse el host de visual studio. Recordar que cuando ejecutamos .net el compilador genera MSIL y el CLR nos proporciona un host de ejecución que nos proporciona un dominio de aplicación (una forma de aislamiento preventivo entre aplicaciones ) cuando no permitimos o no podemos utilizar el host de visual studio estaremos renunciando a un gran numero de capacidades de debugging como suele ser cuando seleccionamos la opción de reléase.

Configuración de depuración remota

1. Compartimos la carpeta para la maquina remota o instalamos c:\Program Files(x86) \ Microsoft visual Studio 10.0\ IDE\ remoteDebugger\

2. Se copian las tres carpetas pues en SO de 64 bits

3. También se puede instalar con el instalador de remote debuggerque se encuentra en el disco de instalación de visual studio. Rdbgsetup_xXX.exe que lo instalara como un servicio.

4. Se ejecuta msvsmon.exe

Contenidos

• Contexto de depuración en Visual Studio.

• Configuración de Depuración en Visual Studio

• Herramientas de depuración Visual Studio.

• Como depurar en Visual Studio.

Ventana: Jerarquía de llamadasLa jerarquía de llamadas permite navegar porel código mostrando todas las llamadas a ydesde un método, propiedad, o un constructorseleccionados. Esto permite entender mejorcómo fluye el código y evaluar los efectos delos cambios que se realizan en el código.Puede examinar varios niveles de código paraver cadenas complejas de llamadas a métodosy puntos de entrada adicionales al código, loque le permite explorar todas las posiblesrutas de ejecución.

Sin embargo Jerarquía de llamadas noencuentra las referencias del grupo demétodos, que contiene ubicaciones en las queun método se agrega como controlador deeventos o se asigna a un delegado. Para buscartodas las referencias a un método, puede usarel comando Buscar todas las referencias.

También se puede ejecutar el menúcontextual sobre los nodos de la jerarquía dellamadas. por ejemplo ir a la definición (f12)que navegara hasta el código o el PDBcorrespondiente.

Jerarquía de llamadas está disponible entiempo de diseño, a diferencia de la pila dellamadas que muestra el depurador.

Elegir elementos de la caja de herramientas

• Este dialogo nos permite elegir las opciones de nuestro toolbox para algunos de los principales namespaces en uso.

• Se usa fundamentalmente para configurar los componentes que queremos para WPF.

Menú herramientas, opción elegir elementos de la caja de herramientas

Insertar código snipets o envolver codigo

• Insertar snipet ctrol-k,x (insert with..)

• Envolver snipet ctrol-k,s (surround with)

• https://vssnippets.codeplex.com/ en esta url existe una lista de snippets consistentes con las reglas de stylecop para instalarlos solo es necesario REEMPLAZARLOS en una de estas dos carpetas en función de la arquitectura.

• C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC#\Snippets\1033\Visual C#

ó

C:\Program Files\Microsoft Visual Studio 10.0\VC#\Snippets\1033\Visual C#

Ventana de comandosAcceso : menú ver /view seleccione “otras ventanas” seleccione “ventana comando”

La ventana de comando se usa para ejecutar comandos, comandos que aparecen en el propio menú del IDE y otros que no aparecen.

Los mas usados son “of” para open file. Que nos proporciona una búsqueda incremental de los ficheros de la solución a medida que vamos escribiendo.

“g” para debug.start que inicia una sesión de debugging.

“?” Para debug.print de una expresión o valor.

“??” Para un quick watch

“Bl” breakpoint window.

“Help” Para la ayuda de la propia ventana.

“Eval” para Debug.evaluateStament

“Q” stop debugging

Para una completa lista de los comandos disponibles consultar.

https://msdn.microsoft.com/es-es/library/c338aexd.aspx

Y

https://msdn.microsoft.com/es-es/library/c3a0kd3x.aspx

Tareas, errores y miscelánea

• Ventana “Lista de errores”. No hace falta comentar.

• “Ctrl-G” goto line usar en combinación con el comando of (fichero)

• Lista de tareas: por comentario Los tokens son(TODO, HACK ). Para crear nuevos tokens Opciones/Enviroment o contexto/ Lista de tareas, tienes un dialogo para añadir nuevos tokens. (IMPORTANTE PARA GESTIONAR NUESTRA DEUDA TÉCNICA)

Opciones: de proyectos:

• marcar la opción de realizar seguimiento de elemento activo.

• Guardar proyectos al crearlos. (elegir)

Modificadores denenv Consultar :

https://msdn.microsoft.com/es-es/library/xee0c8y7(v=vs.100).aspx

Ventana de inmediato

Esta ventana nos permite realizar depuración en tiempo de diseño sin necesidad de ejecutar el programa.

• La ventana de inmediato nos permite evaluar expresiones tanto en modo diseño como en modo debug. Ver ejemplo de código.

• Esta ventana resulta particularmente útil por ejemplo cuando una sentencia return realiza el calculo de lo que devuelve. Por norma general el colocar el cursor encima no nos permite saber cual es el resultado final pero con esta ventana podemos copiar el la expresión y ejecutarla para saber el resultado.

• El alias de comando “?” corresponde a “Debug.Print (expresión)”

• En tiempo de diseño podemos ejecutar métodos definidos en nuestro código. Si este tiene un punto de interrupción saltara el debugger en dicho punto.

• Importante el signo igual “=” en esta ventana se interpreta como un operador de comparación. No es posible realizar asignaciones en la ventana de comando.

• Es posible ejecutar un comando de la ventana decomando dentro de la ventana de inmediato precediéndolo de el signo “mayor que” “>”

• El modo marcar permite usar una instrucción anterior.

• Esta ventana permite trabajar también con la memoria y los registros. (fuera del alcance en este curso)

Ventana: Autos

• Solo disponible en modo depuración con el programa en break mode.

• Nos proporciona los nombres de las variables el tipo y el valor.

• Guarda los valores en las instrucciones anteriores y posteriores.

• Nos permite cambiar el valor de dichas variables.

• Nos permite ver el valor devuelto por un método

Información de Carga de módulos

• Solo disponible en modo debug.

• Nos proporciona un listado de los asembblies que hemos cargado, el path del mismo, el path de su fichero de PDB y el thread en el que se están ejecutando.

Contenidos

• Contexto de depuración en Visual Studio.

• Configuración de Depuración en Visual Studio

• Herramientas de depuración Visual Studio.

• Como depurar en Visual Studio.

Iniciar/parar la ejecución en modo depurado.

F5 – Depurar –Debug

F11 – paso a paso por instrucciones - step over. Inicia la ejecución y se para en la primera instrucción del programa.

Estas opciones también están en el menú contextual de los ficheros de proyectos pero permiten ser ejecutadas contra un proyecto no marcado como “startup Project”

Ctrl-f10 - Ejecutar hasta el cursor- igualmente opción de menú contextual en el código fuente.

Stop. Finaliza el proceso de debugging

Break all pausa el hilo de ejecución donde este se encuentre y mostrara el código fuente de donde se ha parado.

Set next stament

• Si te has pasado de sentencia en la ejecución paso a paso esta opción te permite hacer marcha atrás.

• Advertencia el uso de esta opción puede resultar peligrosa si el stack o los registros se ha corrompido.

Conectarse a procesos en ejecución

Se lleva a cabo con el attach process

• Depurar una aplicación no creada con viaul studio.

• Depurar un proceso en un equipo remoto

• Iniciar automáticamente el depurador de visual studio cuando un proceso se bloquee mientras se ejecuta fuera de visual studio. Esto es la depuración just in time.

• Se recomienda usar el VS en modo administrador para ver todos los procesos.

Ver ejemplo en vs.

Permisos en depuración remotaDepuración Administrada

En la depuración remota con visual studio. Este se convierte en un cliente de la maquina donde se ejecuta el proceso para ello es necesario instalar o ejecutar los servicios que hemos descrito anteriormente que actúan como servidor. La comunicación entre amsbo es bidireccional y por tanto los permisos tienen que tener en cuenta ambas direcciones lo mas sencillo será que las cuentas locales de administrador tengan permisos entre ambas maquinas y los puertos de tcp y udp estén abiertos.

Los problemas de permisos son el principal escollo para realizar la depuración remota. Pero tener estos permisos abiertos hace al sistema de seguridad vulnerable (sobre todo en la modalidad sin autenticación)por lo que se recomienda que dichos permisos sean temporales.

Especificar una versión de .netEl depurador de Visual Studio 2010 puede depurar versiones anteriores de Microsoft .NET Framework así como la versión actual. Si inicia una aplicación desde Visual Studio, el depurador siempre puede identificar la versión correcta de .NET Framework para la aplicación que se está depurando. Si la aplicación ya se está ejecutando y se utiliza Adjuntar a, es posible que el depurador no siempre identifique una versión anterior de .NET Framework. Si esto ocurre, aparecerá el mensaje de error:

• El depurador ha deducido de manera equivocada la versión de .NET Framework que va a utilizar la aplicación.

• En estos raros casos, puede establecer una clave del Registro para indicar al depurador qué versión utilizar.

• Para especificar una versión de .NET Framework para la depuración

1. Examine el directorio Windows\Microsoft.NET\Framework para encontrar las versiones de .NET Framework instaladas en su equipo. Los números de versión tienen un aspecto similar al siguiente:

2. V1.1.4322

3. Identifique el número de versión correcto y anótelo.

4. Inicie el Editor del Registro (regedit).

5. En el Editor del Registro, abra la carpeta HKEY_LOCAL_MACHINE.

6. Navegue a: HKEY_LOCAL_MACHINE\Software\Microsoft\VisualStudio\10.0\AD7Metrics\Engine\{449EC4CC-30D2-4032-9256-EE18EB41B62B}

7. Si la clave no existe, haga clic con el botón secundario en HKEY_LOCAL_MACHINE\Software\Microsoft\VisualStudio\10.0\AD7Metrics\Engine y haga clic en Nueva clave. Asigne el nombre {449EC4CC-30D2-4032-9256-EE18EB41B62B } a la nueva clave.

8. Después de navegar a {449EC4CC-30D2-4032-9256-EE18EB41B62B }, examine la columna Nombre y encuentre la clave CLRVersionForDebugging.

1. Si la clave no existe, haga clic con el botón secundario del mouse en {449EC4CC-30D2-4032-9256-EE18EB41B62B} y haga clic en Nuevo valor de cadena. A continuación, haga clic con el botón secundario en el nuevo valor de cadena, haga clic en Cambiar nombre y escribaCLRVersionForDebugging.

9. Haga doble clic en CLRVersionForDebugging.

10. En el cuadro Editar cadena, escriba el número de versión de .NET Framework en el cuadro Valor. Por ejemplo: V1.1.4322

11. Haga clic en Aceptar.

12. Cierre el Editor del Registro.

13. Si todavía obtiene un mensaje de error cuando empieza a depurar, compruebe que ha escrito correctamente el número de versión en el Registro.Compruebe también que está utilizando una versión de .NET Framework admitida por Visual Studio. El depurador es compatible con la versión actual de .NET Framework y con las versiones anteriores, pero puede no serlo con versiones futuras.

Depuración de múltiples procesos

• Los procesos corresponden a las aplicaciones y se ejecutan dentro de un dominio.

• Los hilos (Subprocesos) corren dentro de los procesos.

• Diferentes hilos y procesos pueden ser ejecutados de forma paralela.

• El procesamiento en paralelo suele necesitar de sincronización para acceder a recursos. Cuando uno o más hilos esperan a un proceso que jamás queda disponible es una condición conocida como “Dead Lock”

• La depuración se lleva cabo en el host que Visual Studio proporciona.

• Las aplicaciones de script no tienen un proceso. Sino que utilizan otro host como DIIs , o el propio Visual Studio. (t4, dsl)

• Una aplicación .exe puede lanzar varios procesos. Para cambiar de un proceso a otro utilizamos la barra de herramientas “Ubicación de depuración” (debug location).

Herramientas de debuggin de hilos y procesos

Las ventanas del menú de depuración (La mayor parte de ellas son accesibles cuando se esta ejecutando la depuración.)

• El attach to process. (menú debug y tools)

• La ventana de procesos.

• La ventana de hilos

• La ventana de Pila de llamadas Call Stack.

• La ventana de tareas paralelas Parallel tasks.

Ventana de pilas paralelas

Si consultamos la ventana de parallel stacks de una aplicación “hello Wordl” observaremos que en modo que en modo reléase solo tenemos un único hilo. Sin embargo en modo debug tenemos varios hilos mas que son los que nos permiten hacer el debugging y que pertenecen al host de visual studio.

Depuración just in time

• Le depuración just in time hace que una aplicación invoque al depurador en caso de que se produzca una excepción. Este comportamiento se puede deshabilitar en las opciones del debuggerpero no evitara que el error salte.

Ver ejemplo en código.

Depuración de servicios Windows Instalando

La ejecución de un servicio se debe llevar a cabo en el contexto del Administrador de control de servicios en vez de en Visual Studio. Por tanto para depurarlo es necesario instalarlo y realizar un attach del proceso correspondiente.

En este caso es necesario tener en cuenta que el método on-start del servicios debe retornar antes de 30 seg. Pasado ese tiempo si no ha retornado por un punto de interrupción el administrador de servicios no lo iniciara.

Esto significa que el método on-start no se puede depurar si no se secrea un segundo servicio temporal para cargar el proceso de servicio.

Inciso Windows Services introducción Existen dos tipos de servicios Windows :

• Aquellos que solo ejecutan un servicio en un único proceso. Y cuyo tipo es Win32OwnProcess

• Aquellos que ejecutan varios servicios en un único proceso y cuyo tipo es Win32ShareProcess

Por esta razón la plantilla de Windows Services nos proporciona este código en el fichero Program.cs

static void Main(){

ServiceBase[] ServicesToRun;ServicesToRun = new ServiceBase[]

{ new Service1()

};ServiceBase.Run(ServicesToRun);

}

Depuración de Servicios Windows sin instalar

Opción de depuración de WS. Convertir el WS en aplicación de consola.

• Este método pasa por realizar una comprobación inicial del enviroment y varia la forma de invocar el servicio según si esta instalado o no. Lo que permite permiterealizar una depuración dentro del Visual Studio. Para ello eliminamos el fichero program.cs y pasamos el metod main a nuestra clase derivada de System.Windows.Services

static void Main(string[] args){

if (Environment.UserInteractive){

var a = new WSNameService();a.OnStart(args);

}elseServiceBase.Run(new WSNameService());

}

Best practices Windows Services

• Capturar las excepciones no gestionadas en el constructor del servicio

public WSNameService(){

this.ServiceName = "WSNameService";AppDomain.CurrentDomain.UnhandledException += new

UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);}

void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e){

var ex = (Exception)e.ExceptionObject;try{

logService.Fatal("Fallo fatal", ex);}catch (Exception ex2){

// en este caso estamos escribiendo en un log de texto en una carpeta temporalFile.WriteAllText(@"c:\temp\WSNameService" +

DateTime.Now.ToString("yyyyMMddhhmmss") +".txt", ex.ToString() + "\r\n" + (ex.Source ?? ""));

}finally{}

}

Intellitrace

Intellitrace realiza una grabación del historial de ejecución.

Registra eventos y/o llamadas a función.

Permite situarse en cualquier punto del historial y consultar el estado del programa en dicho punto.

No es necesario reiniciar la depuración para recrear los errores o eventos.

Existen dos formas de usarlo, grabar todo y luego filtrar o grabar exclusivamente los eventos en los que se sospecha que ocurre el problema.

Se recomienda mantener las ventanas de variables locales y automático abiertas junto con la propia ventana de intellitrace.

A continuación cuando se pare la ejecución podrá consultarse cualquiera de los eventos grabados y analizar su contexto.

Intellitrace

• Algunas llamadas pueden aparecer atenuadas para indicar que pertenecen a un modulo del que no se graba.

• Cuando se esta revisando la información de eventos se puede reflejar en la ventana de código la parte de fuente que corresponde con el evento o la llamda en ese punto que esta marcado tenemos opciones de navegación adicionales.

• Igualmente podemos buscar desde la ventana de código cuales son las instancias de esa llamada en el histórico de Intellitrace.

• La sesión de intellitrace se puede salvar en disco y recuperar posteriormente.

• EL archivo en que se guarda es un “*.itrace”

• Es conveniente activar la grabación solo cuando sea necesario.

Es posible utilizar intellitrace en sistemas desplegados con el Microsoft Monitoring Agent y el recolector de datos de diagnostico de intellitrace.

Para ampliar información consultar

https://msdn.microsoft.com/es-es/library/dn449058.aspx

https://msdn.microsoft.com/es-es/library/hh398365.aspx

https://msdn.microsoft.com/es-es/library/dn798710.aspx

Gracias

• Javier Hermoso

• Freelance .net

[email protected]

Algunas Fuentes

• Depurar en visual studio.

• https://msdn.microsoft.com/es-es/library/sc65sadd(v=vs.80).aspx

• http://www.codeproject.com/Reference/720512/List-of-Visual-Studio-Project-Type-GUIDs

• http://www.mztools.com/articles/2008/mz2008017.aspx