Depurar plugins en Dataverse Online es diferente a depurar una aplicación normal porque tu código se ejecuta en servidores de Microsoft, no en tu máquina. El Plugin Profiler resuelve este problema: captura la ejecución real del plugin y te permite reproducirla localmente en Visual Studio con breakpoints.
Objetivos de aprendizaje
- Capturar ejecuciones de plugins con el Profiler
- Reproducir la ejecución en Visual Studio para debugging
- Usar Plugin Trace Log para diagnóstico en producción
- Analizar logs de tracing efectivamente
El problema de la depuración remota
Cuando desarrollas una aplicación de escritorio o web tradicional, puedes poner un breakpoint, ejecutar en modo debug, y Visual Studio se detiene exactamente donde quieres. Inspeccionas variables, ejecutas código paso a paso.
Con plugins de Dataverse Online, esto no funciona. Tu código se ejecuta en los servidores de Microsoft. No puedes adjuntar un debugger a esos procesos.
El Plugin Profiler es la solución oficial de Microsoft. Funciona así:
- Activas el profiling para un step específico
- Ejecutas la operación que dispara el plugin
- El sistema captura todo el contexto de ejecución
- Descargas el archivo de perfil
- Usas el PluginRegistration.exe para "reproducir" la ejecución localmente
- Visual Studio se adjunta y puedes depurar normalmente
Capturando una ejecución
Paso 1: Iniciar el Profiler
En Plugin Registration Tool, navega hasta el step que quieres depurar. En la barra de herramientas, busca el botón "Profile" (o click derecho → Profile Step).
Tienes dos modos de profiling:
Exception: Solo captura si el plugin lanza una excepción. Útil para depurar errores específicos sin generar mucho volumen de datos.
Persist to Entity: Guarda el perfil como registro en Dataverse. Puedes recuperarlo incluso sin acceso al PRT.
Paso 2: Reproducir la operación
Con el profiling activo, ve a la aplicación de Dynamics 365 y ejecuta la operación que dispara tu plugin. Crea el registro, actualiza el campo, lo que sea que necesites.
Si el plugin se ejecutó, el perfil se capturó.
Paso 3: Detener y descargar
Vuelve al PRT. Selecciona el step → Profile → Stop Profiling. Esto detiene la captura.
Para modo normal (no Persist): el perfil aparece en la lista. Click derecho → Download Plugin Profile. Guarda el archivo .log en algún lugar accesible.
Para modo Persist: puedes consultar los perfiles en la entidad plugintracelog o descargarlos desde el PRT.
Reproduciendo en Visual Studio
Paso 1: Preparar el proyecto
Asegúrate de que tu proyecto tiene la misma versión del código que está desplegada. Si has hecho cambios después del despliegue, los breakpoints no coincidirán correctamente.
Compila en modo Debug para tener símbolos completos.
Paso 2: Configurar el inicio de depuración
En las propiedades del proyecto (Debug tab o archivo launchSettings.json):
- Start external program: selecciona la ruta a PluginRegistration.exe
- Working directory: el directorio donde está el PRT
Paso 3: Iniciar debugging
Pon breakpoints en tu código y presiona F5 (Start Debugging). Visual Studio inicia el Plugin Registration Tool en modo debug.
En el PRT, ve a Debug → Replay Plugin Execution. Selecciona tu archivo .log y el assembly. Click Start Execution.
El PRT ejecuta tu código localmente con exactamente el mismo contexto que tenía cuando se capturó. Visual Studio se detiene en tus breakpoints.
Qué puedes inspeccionar
Durante el replay tienes acceso completo a las herramientas de debugging de Visual Studio:
- Locals: Variables locales y sus valores
- Watch: Expresiones personalizadas que quieres monitorear
- Immediate Window: Ejecutar código y ver resultados
- Call Stack: La pila de llamadas hasta el punto actual
Los valores de InputParameters, OutputParameters, y todo el contexto son exactamente los que tenía la ejecución real. Esto hace que encontrar bugs sea mucho más fácil que intentar reproducir condiciones manualmente.
Plugin Trace Log para producción
El profiler es excelente para desarrollo, pero no quieres activarlo constantemente en producción. Para diagnóstico en producción, usa Plugin Trace Log.
Habilitar el logging
Settings → Administration → System Settings → pestaña Customization.
El campo "Enable logging to plug-in trace log" tiene tres opciones:
Off: Sin logging. Produce mejor rendimiento.
Exception: Solo registra cuando hay errores. Buen balance entre visibilidad y rendimiento.
All: Registra todas las ejecuciones. Genera muchos datos, úsalo temporalmente para troubleshooting.
Qué se registra
El Plugin Trace Log captura:
- Todo lo que escribiste con ITracingService
- Información del contexto (mensaje, entidad, stage)
- Mensajes de error si hubo excepción
- Timestamps para análisis de rendimiento
Por eso es importante usar ITracingService generosamente durante el desarrollo. Toda esa información estará disponible si necesitas diagnosticar un problema en producción.
Consultar los logs
Puedes ver los logs en Settings → Plug-In Trace Log. También puedes consultarlos programáticamente:
QueryExpression query = new QueryExpression("plugintracelog");
query.ColumnSet = new ColumnSet("typename", "messageblock", "createdon", "exceptiondetails");
// Solo últimas 24 horas
query.Criteria.AddCondition("createdon", ConditionOperator.LastXHours, 24);
// Solo errores
query.Criteria.AddCondition("exceptiondetails", ConditionOperator.NotNull);
query.AddOrder("createdon", OrderType.Descending);
query.TopCount = 50;
EntityCollection logs = service.RetrieveMultiple(query);
Puntos clave
- Plugin Profiler captura ejecuciones reales para reproducir localmente
- El replay preserva todo el contexto: InputParameters, imágenes, usuario
- Visual Studio funciona normalmente durante el replay: breakpoints, watches, step-through
- Plugin Trace Log es la opción para producción, actívalo en modo Exception
- Usa ITracingService generosamente, la información estará en los logs