Hace unos días os contaba cómo crear puntos de interrupción condicionales, más "inteligentes" que los normales y que nos daban mucho más juego a la hora de depurar una aplicación .NET en Visual Studio.
En esta ocasión voy a hablar de los Tracepoints (en contraste con los breakpoints). Un punto de interrupción con traza o tracepoint está pensado para mostrar información adicional sobre el punto de interrupción de modo que podamos trazar lo que ocurre al pasar por él, sin necesidad siquiera de detenerse en el mismo (para lo cual usaríamos las opciones vistas en el artículo anterior).
Se activan usando la otra opción "Actions (o "Acciones") que teníamos en los ajustes de un breakpoint:

Al marcarla se nos muestran las posibles acciones a realizar cuando la ejecución de código pase por este punto, que básicamente son dos: mostrar un mensaje en la ventana de salida y continuar o no la ejecución:

Dentro del cuadro de texto podemos incluir cualquier variable o expresión de nuestro código que esté dentro del ámbito de la línea actual, por lo que podremos mostrar en la ventana de output cualquier información que necesitemos. Solo es necesario escribirlo entre llaves: {}.
Además existen una serie de pseudo-variables especiales que nos ofrece el entorno y que se ven en el tooltip de la figura anterior:
Pseudo Variable: |
Descripción: |
$ADDRESS |
Instrucción actual |
$CALLER |
Función que llama a la actual |
$CALLSTACK |
Imprime la pila de llamadas completa |
$FUNCTION |
El nombre de la función actual |
$PID |
Identificador del proceso |
$PNAME |
Nombre del proceso |
$TID |
Identificador del hilo |
$TNAME |
Nombre del hilo |
Al intentar escribirlas Visual Studio nos ofrece ayuda contextual:

De este modo basta con escribir cualquiera de estas variables para mostrar la información correspondiente.
Por ejemplo, si escribimos esto en un punto de interrupción:

obtendremos la siguiente salida cada vez que pase por el mismo:

y podremos saber más información sobre qué está pasando justo en ese punto del programa, pero sin necesidad de tener que pararnos.
Por defecto está marcada la opción de continuar la ejecución, pero si también queremos que se pare basta con quitar la opción y se comportará como un punto de interrupción normal, deteniendo la ejecución.
Los puntos de interrupción con acciones se representan mediante un rombo granate en lugar de un círculo:

Y así se distinguen mucho mejor.
Dos advertencias para finalizar:
- Si pulsamos sin querer en un tracepoint (el rombo granate) y lo quitamos por error, al volver a ponerlo de nuevo no conserva lo que hayamos establecido y lo perderemos. Así que mucho cuidado.
- No es necesario usar una de estas acciones para mostrar información sobre variables. Para eso está la ventana de "watch", y esto no debería ser un sustituto de la misma.
¡Espero que te resulte útil!