Dividir en el depurador

El código en modo de usuario y en modo kernel usan rutinas diferentes para dividirse en el depurador.

rutinas de interrupción de User-Mode

Una rutina de interrupción hace que se produzca una excepción en el proceso actual, de modo que el subproceso que realiza la llamada pueda indicar al depurador asociado al proceso de llamada.

Para interrumpir un depurador desde un programa en modo de usuario, use la función DebugBreak. Su prototipo es el siguiente:

VOID DebugBreak(VOID);

Cuando un programa en modo de usuario llama a DebugBreak, se producirán las siguientes acciones posibles:

  1. Si se adjunta un depurador en modo de usuario, el programa se dividirá en el depurador. Esto significa que el programa se pausará y el depurador se activará.

  2. Si un depurador en modo de usuario no está conectado, pero la depuración en modo kernel se ha habilitado en tiempo de arranque, todo el equipo se dividirá en el depurador de kernel. Si un depurador de kernel no está conectado, el equipo se inmovilizará y esperará a un depurador de kernel.

  3. Si un depurador en modo de usuario no está asociado y la depuración en modo kernel no está habilitada, el programa finalizará con una excepción no controlada y se activará el depurador post-mortem (Just-In-Time). Para obtener más información, consulte Habilitación de la depuración postmortem.

rutinas de interrupción de Kernel-Mode

Cuando un programa en modo kernel se interrumpe en el depurador, todo el sistema operativo se inmoviliza hasta que el depurador de kernel permite que la ejecución se reanude. Si no hay ningún depurador de kernel presente, se trata como una comprobación de errores.

La rutina DbgBreakPoint funciona en el código en modo kernel, pero es similar a la rutina de modo usuario DebugBreak .

La rutina DbgBreakPointWithStatus también provoca una interrupción, pero también envía un código de estado de 32 bits al depurador.

Las rutinas KdBreakPoint y KdBreakPointWithStatus son idénticas a DbgBreakPoint y DbgBreakPointWithStatus, respectivamente, cuando se compilan en el entorno de compilación comprobado. Cuando se compila en el entorno de compilación libre, no tienen ningún efecto.

rutinas de interrupción condicional de Kernel-Mode

Hay dos rutinas de interrupción condicional disponibles para el código en modo kernel. Estas rutinas prueban una expresión lógica. Si la expresión es false, la ejecución se detiene y el depurador se activa.

  • La macro ASSERT prueba una expresión lógica. Si la expresión es false, la ejecución se detiene y el depurador se activa. La expresión con errores y su ubicación en el programa se muestran en el depurador.

  • La macro ASSERTMSG es idéntica a ASSERT , salvo que permite enviar un mensaje adicional al depurador.

ASSERT y ASSERTMSG solo están activos cuando se compilan en el entorno de compilación comprobado. Cuando se compila en el entorno de compilación libre, no tienen ningún efecto.