Ver por etiquetas

Todas las etiquetas » Depuración (RSS)

Como detectar cuando las consultas no parametrizadas dañan el rendimiento de SQL Server y que hacer

Que no parametrizar las consultas es fuente de problemas es algo que cada vez más desarrolladores conocen. Se ha hecho mucha labor didáctica sobre este tema en los últimos tiempos. Pero nunca esta de más recordar estos problemas. A raíz de un caso que hemos tenido recientemente en el Debuging & Optimization Team de Plain Concepts, me he decidido a hablar de este tema. Si no usamos consultas parametrizadas los problemas principalmente son dos: Uno de seguridad...

¿Qué hacer si MSMQ tarda mucho en enviar el primer mensaje?

MSMQ es una de esas tecnologías que de repente reviven, y pasan de ser usadas por unos pocos a ser ampliamente utilizadas. WCF y la popularidad que las arquitecturas EDA ( Event Driven Architecture ) han ganado tiene que ver mucho con este renacer. WCF ha facilitado enormemente la utilización de MSMQ llevando las ventajas de las comunicaciones basada en mensajería a una infinidad de arquitecturas. Si queréis saber más sobre el tema no os perdáis un webcast muy interesante del que ya hablé hace un...

Modelos de salud: ¿Cúanto tarda una operación determinada de mi aplicación?

Poder reponder esta simple pregunta cuando nuestra aplicación está en producción nos puede dar un motón de información sobre la salud de la misma. Todo modelo de salud de una aplicación debería darnos la respuesta a esta simple pregunta para las operaciones más significativas que realiza la aplicación. Evidentemente, en situaciones donde hay problemas de rendimiento, siempre podríamos responder esta cuestión utilizando un...

El cuento de los tres desarrolladores…

Eransé que se eran tres desarrolladores. Los tres tenían que sincronizar sus hilos, habían oido hablar de las terribles historias sobre problemas de corrupción de memoria, condiciones de carrera, y demás ‘lobos’ capaces de devorar cualquier aplicación cuando se ponía en producción. Menos más que existían los objetos de sincronización pensaron y se pusieron a trabajar. El primero de los desarrolladores pregunto...

Luchando contra los interbloqueos en Sql Server

La bases de datos utilizan los bloqueos para asegurar las propiedades ACID de las transacciones. Son un mecanismo imprescindible que tienen una cara oculta, un peaje necesario que muchas veces nos complica la vida: los interbloqueos . Los interbloqueos son una situación a la que todo desarrollador de aplicaciones que manejan un volumen elevado de datos o de peticiones concurrentes se enfrenta en alguna ocasión. Desde el punto de vista de proceso de desarrollo, el antidotó es simple: hacer pruebas...

Cobertura de código más allá de las pruebas unitarias

Tendemos a asociar la cobertura de código de manera casi exclusiva a las pruebas unitarias. Sin duda, es muy relevante la cobertura de nuestras pruebas a la hora de poder estimar en que medida nos protegen de regresiones y errores. Además cuando escribimos pruebas, la cobertura nos proporciona información de suma relevancia a la hora de saber que porciones de nuestro código carecen en absoluto de pruebas y, en consecuencia, ilumina aquellos lugares donde debemos centrar nuestro esfuerzos. Una cobertura...

Bugleanos... o la historia de un bug que no lo es

Desde que apareció el primer bug de la historia , los desarrolladores los venimos sufriendo con frecuencia. Siempre que nos enfrentamos a un comportamiento anómalo, pasamos por varias fases. En una primera fase asumimos que hemos cometido un error, depuramos y le damos vueltas a asunto hasta que, varias madiciones depués, pasamos a la siguiente fase. No puede ser mi fallo, el error tiene que estar en las librerías que estoy utilizando. Y pasamos a buscar un 'workarround'... Total no nos queda...
Publicado por Rodrigo Corral | 11 comment(s)
Archivado en: ,,

Cómo cazar una fuga de memoria en .Net (y II)

Comentaba hace unos días como he sufrido una fuga de memoria en .Net , esas que en teoria son 'imposibles' y presentaba un caso mínimo que lo reproducía. Luego, explique como dilucidar si se trataba de una fuga de memoria manejada o de memoria nativa . Hoy toca hablar de cómo llegue a determinar en que lugar exacto del código se estaba produciendo la fuga de memoria en cuestión. La herramienta que utlice para ello fue el CLR Profiler, que nos permite monitorizar todas las asignaciones de...
Publicado por Rodrigo Corral | con no comments
Archivado en: ,

Cómo cazar una fuga de memoria en .Net (I)

Hablaba en un post anterior de como me las he tenido que ver con una fuga de memoria en .Net recientemente, e incluso ponía un pequeño caso mínimo representativo del problema que he tenido. Hoy toca hablar de como llegue a la conclusión de que estaba ante una fuga de memoria y a la conclusión de que se trataba de una fuga de memoria manejada. Para diagnosticar una fuga de memoria en .Net debemos comenzar por responder dos preguntas, que a continuación veremos. Si diré que la herramienta para contestar...
Publicado por Rodrigo Corral | 4 comment(s)
Archivado en: ,

Fugando memoria con .Net

Una de la grandes maravillas de los lenguajes manejados es que es imposible fugar memoria... al menos en teoria. Pero la verdad es que aunque es mucho más dificil fugar memoria, no es imposible. Es imposible fugar memoria en el sentido clásico del termino, en el sentido de reservar memoria, con un new , un malloc , un SysAllocString , etc y no recordar liberarla con el correspondiente delete , free , o SysFreeString , algo muy común en C o C++, esta es la buena noticia y es más por si sola justifica...
Publicado por Rodrigo Corral | 25 comment(s)
Archivado en: ,

¿Pero dónde $%&Qñ&$ se ha producido la excepción?

Existe un truco bastante simple y útil que nos permite saber en que momento exacto se está producciendo una excepción. Me sorprende que sea desconocido por un motón de desarrolladores con los que me cruzo. Se trata de usar la capacidad del depurador de Visual Studio para que el depurador para la ejecución cuando se produce una excepción de un tipo o tipos determinados (o de cualquier tipo si así lo queremos). Para ello basta con utilizar el dialogo Exceptions (Excepciones) al que se puede acceder...
Publicado por Rodrigo Corral | 8 comment(s)

Depurar servicios con ayuda de PowerShell

Hablaba hace unos días de algunos trucos para depurar servicios: Depurando servicios de Windows más facilmente . Los trucos comentados en mi anterior post, aun siendo útililes, tienen un problema. De una u otra manera alteran el servicio que queremeos depurar. El código que realmente se ejecuta no es exactamente el código que ejcutará nuestro servicio en su versión release. Windows cuenta con un mecanismo que nos permite establecer un depurador para que se ejecute cuando se arranca un determinado...
Publicado por Rodrigo Corral | con no comments
Archivado en: ,

Depurando servicios de Windows más facilmente

Depurar servicios es una tarea complicada. Esta complejidad tiene su origen en dos aspectos, uno, que es el SCM quien inicia un servicio y por tanto no podemos iniciar los servicios con el depurador adjuntado al proceso (al menos no facilmente) y dos para cuando tenemos oportunidad de adjuntar el depurador, el código de inicio del servicio ya ha ejecutado. Os voy a contar un par de trucos que uso a la hora de depurarlos. El primero es bien simple, se trata de usar la siguiente instrucción: System...
Publicado por Rodrigo Corral | 6 comment(s)
Archivado en: ,