API de extensión de programación del depurador
Esta sección incluye:
Información general sobre el motor del depurador
Uso de la API del motor del depurador
Escritura de extensiones de DbgEng
Escritura de extensiones WdbgExts
Personalización de la salida del depurador mediante DML
Uso de JavaScript para ampliar las funcionalidades del depurador
Desarrollo de módulos de extensibilidad de transporte KDNET
En esta documentación se describe cómo usar interfaces como las proporcionadas por el motor del depurador para escribir extensiones que se ejecutarán en WinDbg, KD, CDB y NTSD. Estas extensiones del depurador se pueden usar al realizar la depuración en modo de usuario o en modo kernel.
Motor del depurador
El motor del depurador proporciona una interfaz para examinar y manipular destinos de depuración en modo de usuario y modo kernel.
El motor del depurador puede adquirir destinos, establecer puntos de interrupción, supervisar eventos, símbolos de consulta, leer y escribir memoria, y controlar subprocesos y procesos en un destino.
Puede usar el motor del depurador para escribir bibliotecas de extensiones del depurador y aplicaciones independientes. Estas aplicaciones son aplicaciones del motor de depurador. Una aplicación del motor de depurador que usa la funcionalidad completa del motor del depurador es un depurador. Por ejemplo, WinDbg, CDB, NTSD y KD son depuradores; El motor del depurador proporciona el núcleo de su funcionalidad.
La API del motor de depurador se especifica mediante los prototipos del archivo de encabezado dbgeng.h.
Para obtener más información, vea Información general sobre el motor de depurador y Uso de la API del motor del depurador.
Extensiones
Puede crear sus propios comandos de depuración escribiendo y compilando un archivo DLL de extensión. Por ejemplo, es posible que quiera escribir un comando de extensión para mostrar una estructura de datos compleja.
Hay tres tipos diferentes de archivos DLL de extensión del depurador:
Archivos DLL de extensión dbgEng. Se basan en los prototipos del archivo de encabezado dbgeng.h. Cada DLL de este tipo puede exportar comandos de extensión DbgEng. Estos comandos de extensión usan la API del motor del depurador y también pueden usar la API WdbgExts.
Para obtener más información, consulte Escritura de extensiones de DbgEng.
Archivos DLL de extensión EngExtCpp. Se basan en los prototipos de los archivos de encabezado engextcpp.h y dbgeng.h. Cada DLL de este tipo puede exportar comandos de extensión DbgEng. Estos comandos de extensión usan la API del motor de depuración y el marco de extensión EngExtCpp, y también pueden usar la API WdbgExts.
Archivos DLL de extensión WdbgExts. Se basan en los prototipos del archivo de encabezado wdbgexts.h. Cada DLL de este tipo exporta uno o varios comandos de extensión WdbgExts. Estos comandos de extensión usan la API WdbgExts exclusivamente. Para obtener más información, vea Escritura de extensiones WdbgExts.
La API de DbgEng se puede usar para crear extensiones o aplicaciones independientes. La API WdbgExts contiene un subconjunto de la funcionalidad de la API del motor de depurador y solo se puede usar mediante extensiones.
Todas las extensiones del depurador deben compilarse y compilarse con Visual Studio.
Los ejemplos de código de extensión se instalan como parte del paquete Herramientas de depuración para Windows si realiza una instalación personalizada y selecciona el componente sdk y todos sus subcomponentes. Se pueden encontrar en el subdirectorio sdk\samples del directorio de instalación herramientas de depuración para Windows.
La manera más fácil de escribir nuevas extensiones del depurador es estudiar las extensiones de ejemplo. Cada extensión de ejemplo incluye archivos makefile y sources para su uso con la utilidad Build. Ambos tipos de extensiones se representan en los ejemplos.
Escritura de extensiones del depurador de análisis personalizado
Puede ampliar las funcionalidades del comando !analyze debugger escribiendo un complemento de extensión de análisis. Al proporcionar un complemento de extensión de análisis, puede participar en el análisis de una comprobación de errores o una excepción de una manera específica de su propio componente o aplicación. Al escribir un complemento de extensión de análisis, también se escribe un archivo de metadatos que describe las situaciones en las que desea que se llame al complemento. Cuando se ejecuta !analyze , busca, carga y ejecuta los complementos de extensión de análisis adecuados. Para obtener más información, vea Escribir extensiones del depurador de análisis personalizado.
Personalización de la salida del depurador mediante DML
Puede personalizar la salida del depurador mediante DML. Para obtener más información, consulte Personalización de la salida del depurador mediante DML.
Uso de JavaScript para ampliar las funcionalidades del depurador
Use JavaScript para crear scripts que comprendan los objetos del depurador y amplíen y personalicen las funcionalidades del depurador. Los proveedores de JavaScript puenten un lenguaje de scripting al modelo de objetos interno del depurador. El proveedor de scripting del depurador de JavaScript permite el uso de JavaScript con el depurador. Para obtener más información, consulte Scripting del depurador de JavaScript.
Desarrollo de módulos de extensibilidad de transporte KDNET
El transporte de KDNET se puede extender para ejecutarse en cualquier hardware mediante el uso de un archivo DLL de módulo de extensibilidad de controladores de hardware independiente. Los proveedores de tarjetas de red desarrollan módulos de extensibilidad de transporte de KDNET para agregar compatibilidad con la depuración del kernel a tarjetas de red específicas.
KDNET es un transporte de depuración de kernel que permite la depuración del kernel de ventanas a través de una red. Está diseñado para que la capa de compatibilidad de hardware esté integrada en un módulo independiente de la capa de interfaz de kernel y procesamiento de paquetes de red. Este nivel de compatibilidad con controladores de hardware se denomina módulo de extensibilidad KDNET. Para obtener más información, consulte Desarrollo de módulos de extensibilidad de transporte de KDNET.