Uso del depurador y la Logexts.dll
Una manera de activar Logger es iniciar CDB o WinDbg y adjuntarla a una aplicación de destino en modo de usuario como de costumbre. A continuación, use el comando de extensión !logexts.logi o !logexts.loge .
Esto insertará código en el punto de interrupción actual que saltará a una rutina que carga e inicializa Logexts.dll en el proceso de aplicación de destino. Esto se conoce como "insertar registrador en la aplicación de destino".
En realidad, habrá dos instancias de Logexts.dll en ejecución, ya que este módulo es un archivo DLL de extensión del depurador y el programa que se inserta en la aplicación de destino. El depurador y las instancias de destino de Logexts.dll se comunican a través de una sección compartida de memoria que incluye los identificadores del archivo de salida, la máscara de categoría actual y un puntero al búfer de salida del registro.
Asociación a la aplicación de destino
Para obtener información sobre cómo adjuntar el depurador a la aplicación de destino, consulte Depuración de un proceso de User-Mode mediante WinDbg o Depuración de un proceso de User-Mode mediante CDB.
Uso de los comandos de extensión de registrador
Para obtener la sintaxis completa de cada extensión, consulte su página de referencia.
!logexts.logi
Inserta registrador en la aplicación de destino. Esto inicializa el registro, pero no lo habilita.
!logexts.loge
Habilita el registro. Si no se ha usado !logexts.logi , esta extensión inicializará y habilitará el registro.
!logexts.logd
Deshabilita el registro. Esto hará que todos los enlaces de API se quiten en un esfuerzo para permitir que el programa se ejecute libremente. Los enlaces COM no se quitan porque no se pueden volver a habilitar a voluntad.
!logexts.logo
Muestra o modifica las opciones de salida. Tres tipos de salida son posibles: mensajes enviados directamente al depurador, un archivo de texto o un archivo .lgv. El archivo .lgv contiene mucho más información que las otras dos; se puede leer con LogViewer.
Si deshabilita la salida del archivo de texto, se seguirá creando un archivo .txt de tamaño cero. Esto puede sobrescribir un archivo de texto guardado anteriormente en la misma ubicación.
!logexts.logc
Muestra las categorías de API disponibles, controla qué categorías se registrarán y cuáles no, y muestra las API contenidas en cualquier categoría.
Si una categoría está deshabilitada, se quitarán los enlaces de todas las API de esa categoría para que ya no haya ninguna sobrecarga de rendimiento. Los enlaces COM no se quitan porque no se pueden volver a habilitar a voluntad.
Habilitar solo determinadas categorías puede ser útil cuando solo está interesado en un tipo determinado de interacción que el programa tiene con Windows, por ejemplo, operaciones de archivo. Esto reduce el tamaño del archivo de registro y también reduce el efecto que el registrador tiene en la velocidad de ejecución del proceso.
!logexts.logb
Muestra o vacía el búfer de salida actual. Como consideración de rendimiento, la salida del registro se vacía en el disco solo cuando el búfer de salida está lleno. De forma predeterminada, el búfer es de 2144 bytes.
Dado que la aplicación de destino administra la memoria del búfer, la escritura automática del búfer en los archivos de registro del disco no se producirá si hay una infracción de acceso o algún otro error no recuperable en la aplicación de destino. En tales casos, debe usar este comando para vaciar manualmente el búfer en el disco o, de lo contrario, es posible que las API registradas más recientemente no aparezcan en los archivos de registro.
!logexts.logm
Muestra o crea una lista de inclusión o exclusión de módulos. A menudo, es conveniente registrar solo las llamadas API realizadas a partir de un determinado módulo o conjunto de módulos. Para facilitarlo, logger le permite especificar una lista de inclusión de módulos o, como alternativa, una lista de exclusión de módulos. Por ejemplo, usaría una lista de inclusión si solo quisiera registrar llamadas de uno o dos módulos. Si desea registrar llamadas realizadas desde todos los módulos excepto una breve lista de módulos, usaría una lista de exclusión. Los módulos Logexts.dll y Kernel32.dll siempre se excluyen, ya que el registrador no puede registrarse por sí mismo.