Patrón de registro: utilizar OutputDebugString, DebugView
En este artículo, analizamos un método de registro eficaz mediante las utilidades OutputDebugString y DebugView de la API de Windows en Excel VBA.
1. Patrones básicos de registro
Cursos de Excel VBA (9): Procedimientos de Excel VBA
de los anteriores 4.3. Cómo utilizar la herramienta Ventana inmediata En el índice, “3. Se cubrió la verificación del mensaje de salida.
Esta es una forma de comprobar la salida de contenido de Debug.Print en la ventana de ejecución inmediata. Si bien este método tiene la ventaja de ser muy simple, tiene las siguientes desventajas.
- VBE (Editor de Visual Basic) no puede verificar el contenido del registro de salida cuando se detiene el proceso de Excel.
- Entre los métodos de uso anteriores, “2. Si lo usa junto con "verificar valores de variables durante la ejecución", los valores de registro y variables se mezclan en el medio, lo que puede interferir con la verificación del registro.
- Los mensajes de más de 200 líneas se eliminan. Es decir, solo se mantienen las últimas 200 líneas.
Una mejor manera de reemplazar Debug.Print es usar OutputDebugString, una API de Windows, y DebugView, una utilidad.
2. Patrón de uso de OutputDebugString
2.1. Código VBA usando OutputDebugString
En el siguiente artículo, presenté cómo usar la API de Windows, OutputDebugString.
5.1.4. Código fuente del módulo modUtil Al modificar ligeramente el código introducido en , todo el contenido necesario se escribió de la siguiente manera.
Option Explicit Public Const LOG_PREFIX As String = "[VBA] " 'DebugView에서 로그 메시지를 필터링하기 위한 Prefix 지정 Private Declare PtrSafe Sub OutputDebugString Lib "kernel32" Alias "OutputDebugStringA" (ByVal lpOutputString As String) 'OutputDebugString API를 이용한 Debug Message 출력 'DebugView등을 이용하여 메시지 View 가능함 Public Sub DoLog(aMsg As String) OutputDebugString LOG_PREFIX + aMsg End Sub 'Log 예시 프로시져 Public Sub TestLog() Dim lIdx As Long For lIdx = 1 To 1000 DoLog "Log[" + CStr(lIdx) + "]" Next End Sub
- Línea 2: especifique un prefijo para filtrar los mensajes de registro en DebugView. El método de filtrado se describe a continuación.
- Línea 4: Importe la API de Windows OutputDebugString y declárela como una función.
- Línea 9: combine LOG_PREFIX y el mensaje de registro, páselo como parámetro a la función importada en la línea 4 y ejecútelo. Haga de este proceso una función DoLog.
- Línea 16: Llame a la función DoLog donde se requiere la salida del mensaje de registro.
En este punto, todo el trabajo requerido en el código VBA está completo. A continuación, veamos la utilidad DebugView.
2.2. Introducción y uso de la utilidad DebugView
2.2.1. Introducción a la utilidad DebugView
Vista de depuración Paquete de sistemas internosEs una herramienta de utilidad incluida en .
DebugView: sistemas internos de Windows | Documentos de Microsoft
DebugView versión 4.90
Marcos Russinovich
Publicado el: 23 de abril de 2019
Descargar DebugView (1.3 MB)Introducir
Debugview es una aplicación que le permite monitorear la salida de depuración en su sistema local o en cualquier computadora en una red accesible a través de tcp/ip. Puede mostrar la salida de depuración en modo kernel y Win32, por lo que no necesita un depurador para detectar la salida de depuración que genera su aplicación o controlador de dispositivo, y no tiene que modificar su aplicación o controlador para usar depuración no estándar API de salida.Capturar vista de depuración
En Windows 2000, XP, Server 2003 y Vista debugview capturas:
– Cadena de depuración de salida de Win32
– DbgPrint en modo kernel
– Todas las variantes en modo kernel de DbgPrint implementadas en Windows XP y Server 2003
Resumido brevemente, "DebugView es una herramienta de utilidad que captura la cadena pasada al llamar a OutputDebugString, una API de Windows, y la muestra en la pantalla".
La pantalla de ejemplo de DebugView es la siguiente.
* fuente: https://docs.microsoft.com/ko-kr/sysinternals/downloads/debugview#installation-and-use
2.2.2. Utilice la utilidad DebugView
Descargue y ejecute DebugView, luego ejecute el menú Filter/Highlight.
Cuando se ejecuta el menú anterior, se muestra la siguiente pantalla.
- Incluir: ingrese una cadena incluida en el mensaje que se mostrará. Utilice * como carácter comodín (por ejemplo, [VBA]*) para generar todos los mensajes si están vacíos. Al ingresar varias cadenas, sepárelas con punto y coma (;).
- Excluir: Ingrese una cadena incluida en el mensaje para que no se envíe. Al ingresar varias cadenas, sepárelas con punto y coma (;).
- Resaltar: seleccione los filtros 1 a 20 y seleccione una cadena y un color para resaltar. Se puede configurar el color de primer plano y el color de fondo
Una cosa a tener en cuenta es que si no ingresa una cadena para filtrar en Incluir, la salida de mensajes de diferentes procesos será capturada y mezclada. Se recomienda que la cadena que se filtrará se especifique según sea necesario.
“2.1. Para capturar el resultado del código VBA de ejemplo escrito en la tabla de contenido de "Código VBA", ingrese "[VBA]*" en Incluir y haga clic en el botón Aceptar.
Si ejecuta el código VBA, puede verificar el mensaje capturado en DebugView de la siguiente manera.
![](https://prodskill.com/wp-content/uploads/2022/09/image-201.png)
![](https://prodskill.com/wp-content/uploads/2022/09/image-202.png)
Como referencia, usando la función Resaltar, puede generar algo como esto:
Si un color de fondo y un color de primer plano son diferentes cuando se incluye una cadena específica, es visualmente muy bueno verificar el progreso actual del registro.
Hasta ahora, hemos analizado métodos de registro efectivos mediante las utilidades OutputDebugString y DebugView de la API de Windows en Excel VBA.
DebugView tiene muchas características atractivas como Highlight y Remote Logging. Estas características se tratarán más adelante en un artículo separado.
Video de demostración de la función macro DA# (YouTube) En la publicación, registré la situación en la que se capturan mensajes en la utilidad DebugView.
En el siguiente video, la esquina superior derecha es DebugView. Puede grabar un registro de cómo funciona la función y revisarlo más tarde.
Tenga en cuenta que, Macro DA#(1): DA#, API DA#, descripción general de la macro DA# La macro DA# presentada en , utiliza LOG_PREFIX como “[DA#]”.