<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Gabriel Rodriguez Plancarte &#187; Debugging</title>
	<atom:link href="http://gabrielrodriguez.net/tag/debugging/feed/" rel="self" type="application/rss+xml" />
	<link>http://gabrielrodriguez.net</link>
	<description>Tecnologia, Diseño, Negocios y Desarrollo</description>
	<lastBuildDate>Mon, 29 Mar 2010 07:58:45 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Pasos para debuggear problemas complejos correctamente</title>
		<link>http://gabrielrodriguez.net/pasos-para-debuggear-problemas-complejos-correctamente/</link>
		<comments>http://gabrielrodriguez.net/pasos-para-debuggear-problemas-complejos-correctamente/#comments</comments>
		<pubDate>Sat, 12 Sep 2009 17:53:01 +0000</pubDate>
		<dc:creator>Gabriel</dc:creator>
				<category><![CDATA[Problemas y Soluciones]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Debugging]]></category>

		<guid isPermaLink="false">http://gabrielrodriguez.net/?p=527</guid>
		<description><![CDATA[Un post de Tess Ferrandez, una de las personas mas conocedoras sobre debugging avanzado de .NET y Windows en general.
Este post no es tecnico, sino un recordatorio de que muchas veces al estar intentar debuggeando un problema muy raro, nos ponemos a trabajar sin rumbo, y sin analizar y definir las cosas basicas como la [...]]]></description>
			<content:encoded><![CDATA[<p>Un post de <a title="Tess Ferrandez" href="http://blogs.msdn.com/tess/default.aspx"><strong>Tess Ferrandez</strong></a>, una de las personas <strong>mas conocedoras sobre debugging avanzado de .NET</strong> y Windows en general.</p>
<p>Este post no es tecnico, sino un recordatorio de que muchas veces al estar intentar debuggeando un problema muy raro, nos ponemos a trabajar sin rumbo, y sin analizar y definir las cosas basicas como la frecuencia del problema, cuando empezó el problema, etc.</p>
<p>Tess es como el Chuck Norris de debugging.</p>
<p>El articulo es: <a title="First step in troubleshooting complex issues: Define and scope your issue properly" href="http://blogs.msdn.com/tess/archive/2009/09/09/first-step-in-troubleshooting-complex-issues-define-and-scope-your-issue-properly.aspx">Primer paso al debuggear problemas complejos: Define y delimita tu problema correctamente</a></p>
]]></content:encoded>
			<wfw:commentRss>http://gabrielrodriguez.net/pasos-para-debuggear-problemas-complejos-correctamente/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Debuggeando con Breakpoints condicionales y Tracepoints en Visual Studio</title>
		<link>http://gabrielrodriguez.net/debuggeando-con-breakpoints-condicionales-y-tracepoints-en-visual-studio/</link>
		<comments>http://gabrielrodriguez.net/debuggeando-con-breakpoints-condicionales-y-tracepoints-en-visual-studio/#comments</comments>
		<pubDate>Sun, 08 Mar 2009 00:04:18 +0000</pubDate>
		<dc:creator>Gabriel</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[Breakpoints]]></category>
		<category><![CDATA[Condicionales]]></category>
		<category><![CDATA[Debuggeando]]></category>
		<category><![CDATA[Debugging]]></category>
		<category><![CDATA[Tracepoints]]></category>
		<category><![CDATA[VStudio]]></category>

		<guid isPermaLink="false">http://gabrielrodriguez.net/?p=196</guid>
		<description><![CDATA[Los breakpoints con condiciones y los Tracepoints son dos features de Visual Studio que mucha gente no conoce y que facilmente pueden ahorrar horas a la hora de estar analizando un problema en código.
Empecemos con los breakpoints condicionales. Supongamos que tenemos el siguiente codigo:
private void button1_Click(object sender, RoutedEventArgs e)
{
int sum = 0;

for (int i = [...]]]></description>
			<content:encoded><![CDATA[<p>Los <strong>breakpoints con condiciones</strong> y los <strong>Tracepoints </strong>son dos features de Visual Studio que mucha gente no conoce y que facilmente <strong>pueden ahorrar horas a la hora de estar analizando un problema en código</strong>.</p>
<p>Empecemos con los breakpoints condicionales. Supongamos que tenemos el siguiente codigo:</p>
<pre class="brush: csharp;">private void button1_Click(object sender, RoutedEventArgs e)
{
int sum = 0;

for (int i = 0; i &lt;= 1000; i++)
{
sum += i;
}

MessageBox.Show(sum.ToString());
}
</pre>
<p>Si quisiéramos evaluar el valor de la variable sum cuando el valor de la variable i sea 200 o 400 o 600, tendríamos 2 opciones:</p>
<p>1. Editar nuestro codigo para agregar un bloque IF, y poner un breakpoint adentro del código<br />
2. Poner un breakpoint en la linea sum += i y presionar la tecla F5 200 veces, 400 veces o 600 veces. Lo peor es que he visto que varios desarrolladores lo hacen, por no conocer estas dos features de Visual Studio.</p>
<p>Con <strong>breakpoints condicionales</strong>, podemos hacer que <strong>el debugger de Visual Studio solo detenga la ejecucion cuando una condicion que nosotros asignemos sea verdadera</strong>. En este caso, usariamos la expresión</p>
<pre class="brush: csharp;">i == 200 || i == 400 || i == 600</pre>
<p>Para crear un breakpoint condicional, los pasos son los siguientes:</p>
<p>1. Crear un breakpoint en la linea que queremos<br />
2. Hacer click derecho sobre el breakpoint y seleccionar la opcion <strong>Condition</strong></p>
<div id="attachment_199" class="wp-caption alignnone" style="width: 485px"><img class="size-full wp-image-199" title="Visual Studio Menu de opciones para breakpoints" src="http://gabrielrodriguez.net/wp-content/uploads/2009/03/visual-studio-breakpoint-condicional-1.png" alt="Visual Studio Menu de opciones para breakpoints" width="475" height="275" /><p class="wp-caption-text">Visual Studio Menu de opciones para breakpoints</p></div>
<p>3. Se desplegara el dialogo de <strong>Breakpoint Condition</strong></p>
<p>4. Teclear la condicion(es) que queremos y hacer click en OK.</p>
<div id="attachment_200" class="wp-caption alignnone" style="width: 435px"><img class="size-full wp-image-200" title="Visual Studio Condicion de Breakpoint" src="http://gabrielrodriguez.net/wp-content/uploads/2009/03/visual-studio-breakpoint-condicional-2.png" alt="Visual Studio Condicion de Breakpoint" width="425" height="208" /><p class="wp-caption-text">Visual Studio Condicion de Breakpoint</p></div>
<p>Con esto, el debugger solo va a entrar cuando la condición o condiciones que hayamos asignado se cumplan. Cuando un breakpoint tiene una condición, se despliega un simbolo de + (más) en el círculo rojo, como se ve en la siguiente imagen.</p>
<div id="attachment_201" class="wp-caption alignnone" style="width: 460px"><img class="size-full wp-image-201" title="Visual Studio breakpoint condicional" src="http://gabrielrodriguez.net/wp-content/uploads/2009/03/visual-studio-breakpoint-condicional-3.png" alt="Visual Studio breakpoint condicional" width="450" height="85" /><p class="wp-caption-text">Visual Studio breakpoint condicional</p></div>
<p>Ahora vamos con los <strong>Tracepoints</strong>. Es logico usar breakpoints cuando queremos evaluar y analizar algun objeto que tiene muchas propiedades, pero cuando lo único que queremos es saber el valor de una o dos variables, como en este caso, tal vez nos convenga más usar Tracepoints.</p>
<p><strong>Los tracepoints permiten escribir mensajes que incluyan valores de variables, de aspectos del ambiente</strong> (como el id del thread en el cual se está ejecutando el código, la fecha/hora actual, etc), y más cosas.</p>
<p><strong>Y esto lo hacen sin siquiera detener la ejecucion del programa</strong>. Es decir, podemos crear los tracepoints que queramos, ejecutar el bloque de código que los tiene, y simplemente <strong>ir directamente a la ventana de Output para analizar la información que el Tracepoint emitió</strong>.</p>
<p><strong>Otra ventaja</strong> de usar Tracepoints es que <strong>no es necesario modificar nuestro código para imprimir mensajes de debugging</strong>.</p>
<p>Para crear un Tracepoint los pasos son los siguientes:</p>
<p>1. Crear un breakpoint en la línea que queremos.</p>
<p>2. Hacer click derecho sobre el breakpoint, y seleccionar la opción de &#8220;<strong>When Hit</strong>&#8220;.</p>
<div id="attachment_204" class="wp-caption alignnone" style="width: 181px"><img class="size-full wp-image-204" title="Tracepoint menu en Visual Studio" src="http://gabrielrodriguez.net/wp-content/uploads/2009/03/tracepoint-en-visual-studio-1.png" alt="Tracepoint menu en Visual Studio" width="171" height="183" /><p class="wp-caption-text">Tracepoint menu en Visual Studio</p></div>
<p>3. <strong>Personalizar el mensaje que queremos que el Tracepoint escriba</strong>. Para incluir el valor de una variable, simplemente <strong>ponemos el nombre de la variable encerrado por un par de llaves {}</strong>.</p>
<div id="attachment_205" class="wp-caption alignnone" style="width: 435px"><img class="size-full wp-image-205" title="Ventana de Tracepoint - When breakpoint is hit" src="http://gabrielrodriguez.net/wp-content/uploads/2009/03/tracepoint-when-breakpoint-is-hit.png" alt="Ventana de Tracepoint - When breakpoint is hit" width="425" height="367" /><p class="wp-caption-text">Ventana de Tracepoint - When breakpoint is hit</p></div>
<p>4. Aquí <strong>tambien podemos especificar si queremos que el debugger se detenga o no</strong>. Si el checkbox de la opción &#8220;<strong>Continue Execution</strong>&#8221; está seleccionado (está seleccionado por default), el debugger no detendrá la ejecucion y <strong>el Tracepoint simplemente emitirá su mensaje a la ventana de Output</strong>. De lo contrario, el Tracepoint tambien actuará como un breakpoint normal.</p>
<p>4. Hacer click en OK.</p>
<p>El Breakpoint se convierte en Tracepoint y <strong>la tradicional forma circular se vuelve un rombo</strong>, como se puede ver.</p>
<div id="attachment_206" class="wp-caption alignnone" style="width: 457px"><img class="size-full wp-image-206" title="Forma del tracepoint en Visual Studio" src="http://gabrielrodriguez.net/wp-content/uploads/2009/03/tracepoint-en-visual-studio.png" alt="Forma del tracepoint en Visual Studio" width="447" height="173" /><p class="wp-caption-text">Forma del tracepoint en Visual Studio</p></div>
<p>Aún mejor, <strong>podemos combinar un breakpoint condicional y un tracepoint para solo emitir los mensajes del tracepoint asignándole una condicion</strong>. La combinación de ambos se ve de la siguiente manera, y podemos ver que en la ventana de Output, el mensaje que configuré para el Tracepoint solo se emite tres veces: cuando el valor de i es 200, 400 o 600.</p>
<div id="attachment_209" class="wp-caption alignnone" style="width: 457px"><img class="size-full wp-image-209" title="Tracepoint y Breakpoint condicional juntos" src="http://gabrielrodriguez.net/wp-content/uploads/2009/03/tracepoint-y-breakpoint-condicional.png" alt="Tracepoint y Breakpoint condicional juntos" width="447" height="71" /><p class="wp-caption-text">Tracepoint y Breakpoint condicional juntos</p></div>
<div id="attachment_210" class="wp-caption alignnone" style="width: 660px"><a href="http://gabrielrodriguez.net/wp-content/uploads/2009/03/output-del-tracepoint.png"><img class="size-full wp-image-210" title="Output de un Tracepoint en Visual Studio" src="http://gabrielrodriguez.net/wp-content/uploads/2009/03/output-del-tracepoint.png" alt="Output de un Tracepoint en Visual Studio" width="650" height="73" /></a><p class="wp-caption-text">Output de un Tracepoint en Visual Studio</p></div>
<p>Espero que les haya sido útil.</p>
]]></content:encoded>
			<wfw:commentRss>http://gabrielrodriguez.net/debuggeando-con-breakpoints-condicionales-y-tracepoints-en-visual-studio/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
