6.3 Depuración con Visual Studio

Configura Visual Studio para depuración efectiva de plugins

La lección anterior cubrió el Plugin Profiler desde el lado del PRT. Ahora nos enfocamos en el lado de Visual Studio: cómo configurar tu proyecto para depuración efectiva, qué herramientas usar durante el debugging, y técnicas avanzadas como breakpoints condicionales.

Objetivos de aprendizaje

  • Configurar Visual Studio para depuración de plugins
  • Usar efectivamente las ventanas de debugging
  • Implementar breakpoints condicionales y de datos
  • Entender las diferencias entre Online y On-premises

Configuración del proyecto

Para depuración efectiva, tu proyecto necesita estar configurado correctamente.

Propiedades de compilación

En propiedades del proyecto → Build:

  • Configuration: Debug
  • Define DEBUG constant: marcado
  • Define TRACE constant: marcado
  • Optimize code: desmarcado (optimización interfiere con debugging)

Configuración de depuración

En propiedades del proyecto → Debug:

  • Start action: Start external program
  • Ruta: La ubicación de tu PluginRegistration.exe

Cuando presionas F5, Visual Studio inicia el PRT con el debugger adjuntado. Cualquier breakpoint en tu código del plugin se activará cuando hagas replay.


El flujo de depuración

El proceso típico:

  1. Tienes un plugin con un bug que quieres investigar
  2. Capturas un perfil con Plugin Profiler (como vimos en la lección anterior)
  3. Descargas el archivo .log
  4. Pones breakpoints en las líneas sospechosas de tu código
  5. Presionas F5 en Visual Studio (inicia PRT en modo debug)
  6. En PRT, vas a Debug → Replay Plugin Execution
  7. Seleccionas el archivo .log y tu assembly local
  8. Click Start Execution
  9. Visual Studio se detiene en tus breakpoints

A partir de aquí, puedes:

  • Step Over (F10): Ejecuta la línea actual y pasa a la siguiente
  • Step Into (F11): Si la línea llama a una función, entra en ella
  • Step Out (Shift+F11): Sale de la función actual
  • Continue (F5): Continúa hasta el siguiente breakpoint o el final

Ventanas de depuración esenciales

Visual Studio tiene muchas ventanas de debugging. Estas son las más útiles para plugins:

Locals

Muestra todas las variables locales y sus valores actuales. Actualiza automáticamente mientras avanzas por el código. Es tu vista principal para entender el estado del plugin.

Watch

Te permite añadir expresiones específicas que quieres monitorear. Por ejemplo:


context.InputParameters["Target"]
target.GetAttributeValue("name")
target.Attributes.Count
((Entity)context.InputParameters["Target"]).LogicalName

Puedes expandir objetos complejos y navegar por sus propiedades.

Immediate Window

Ejecuta código en tiempo real mientras estás detenido en un breakpoint. Increíblemente útil para probar hipótesis:


> target.Contains("name")
true
> target["name"]
"Contoso Inc"
> context.Depth
1
> service.Retrieve("account", new Guid("..."), new ColumnSet(true))
{Entity}

Call Stack

Muestra la pila de llamadas que llevaron al punto actual. Útil cuando tienes funciones anidadas o quieres entender cómo llegaste a cierto punto.


Breakpoints avanzados

Breakpoints condicionales

A veces un breakpoint normal se dispara demasiado. Por ejemplo, el plugin procesa 100 registros pero solo uno tiene problemas.

Click derecho en el breakpoint → Conditions:


// Solo detenerse si el nombre cumple cierta condición
target.GetAttributeValue("name") == "Registro Problemático"

// Solo si el contexto tiene cierta profundidad
context.Depth > 1

// Solo si un campo tiene valor nulo
target.GetAttributeValue("parentaccountid") == null

Breakpoints con conteo

Útil en loops: solo pararse después de N iteraciones.

Click derecho → Hit Count → Se detiene cuando el conteo equals, is greater than, o is a multiple of un número.

Tracepoints

En lugar de detenerse, escribe un mensaje al Output window. Click derecho → Actions → marcar "Log a message":


Procesando registro: {target.Id}, nombre: {target.GetAttributeValue("name")}

El código no se detiene pero ves los mensajes. Útil para entender flujos sin interrumpir la ejecución.


Depuración On-premises vs Online

Para despliegues on-premises (Dynamics 365 Server instalado localmente), tienes una opción adicional: Attach to Process.

  1. Despliega el assembly con símbolos de depuración (PDB)
  2. En Visual Studio: Debug → Attach to Process
  3. Busca w3wp.exe (el proceso de IIS)
  4. Adjunta el debugger
  5. Ejecuta la operación en Dynamics
  6. El breakpoint se activa directamente

Esto es más rápido que el flujo de Profiler pero solo funciona on-premises. Para Dynamics 365 Online, el único método es Plugin Profiler.


Consejos prácticos

Mantén sincronizado el código: El código en Visual Studio debe ser exactamente el mismo que está desplegado. Si has hecho cambios después del despliegue, los números de línea no coincidirán y los breakpoints no funcionarán correctamente.

Compila en Debug: El modo Release optimiza el código, lo que puede causar comportamientos extraños durante debugging como variables "optimized away".

Usa símbolos: Asegúrate de que los archivos PDB estén junto al DLL. Sin símbolos, verás código desensamblado en lugar de tu fuente.


Puntos clave

  • Configura el proyecto para iniciar PRT como programa externo
  • Locals, Watch, e Immediate Window son tus herramientas principales
  • Breakpoints condicionales evitan paradas innecesarias
  • Tracepoints escriben mensajes sin detener la ejecución
  • Attach to Process solo funciona on-premises

Para profundizar

Inicia sesión e inscríbete para guardar tu progreso.
En este curso
¿Te ha resultado útil?