API di estensione per la programmazione del debugger

Contenuto della sezione

Panoramica del motore di debugger

Uso dell'API del motore di debugger

Scrittura di estensioni DbgEng

Estensioni EngExtCpp

Scrittura di estensioni WdbgExts

Personalizzazione dell'output del debugger tramite DML

Uso di JavaScript per estendere le funzionalità del debugger

Sviluppare moduli di estendibilità del trasporto KDNET

Questa documentazione descrive come usare interfacce come quelle fornite dal motore di debugger per scrivere estensioni che verranno eseguite in WinDbg, KD, CDB e NTSD. Queste estensioni del debugger possono essere usate durante l'esecuzione di debug in modalità utente o in modalità kernel.

Motore del debugger

Il motore del debugger fornisce un'interfaccia per esaminare e modificare le destinazioni di debug in modalità utente e in modalità kernel.

Il motore del debugger può acquisire destinazioni, impostare punti di interruzione, monitorare eventi, simboli di query, memoria di lettura e scrittura e controllare i thread e i processi in una destinazione.

È possibile usare il motore del debugger per scrivere sia librerie di estensioni del debugger che applicazioni autonome. Tali applicazioni sono applicazioni del motore di debugger. Un'applicazione del motore di debugger che usa la funzionalità completa del motore del debugger è un debugger. Ad esempio, WinDbg, CDB, NTSD e KD sono debugger; il motore del debugger fornisce il core della loro funzionalità.

L'API del motore di debugger è specificata dai prototipi nel file di intestazione dbgeng.h.

Per altre informazioni, vedere Panoramicadel motore di debugger e Uso dell'API del motore di debugger.

Estensioni

È possibile creare comandi di debug personalizzati scrivendo e creando una DLL di estensione. Ad esempio, è possibile scrivere un comando di estensione per visualizzare una struttura di dati complessa.

Esistono tre tipi diversi di DLL dell'estensione del debugger:

  • DLL di estensione DbgEng. Questi sono basati sui prototipi nel file di intestazione dbgeng.h. Ogni DLL di questo tipo può esportare comandi di estensione DbgEng. Questi comandi di estensione usano l'API motore di debugger e possono usare anche l'API WdbgExts.

    Per altre informazioni, vedere Scrittura di estensioni DbgEng.

  • DLL dell'estensione EngExtCpp. Questi sono basati sui prototipi nei file di intestazione engextcpp.h e dbgeng.h. Ogni DLL di questo tipo può esportare comandi di estensione DbgEng. Questi comandi di estensione usano sia l'API del motore di debugger che il framework di estensione EngExtCpp e possono usare anche l'API WdbgExts.

  • DLL dell'estensione WdbgExts. Questi sono basati sui prototipi nel file di intestazione wdbgexts.h. Ogni DLL di questo tipo esporta uno o più comandi di estensione WdbgExts. Questi comandi di estensione usano esclusivamente l'API WdbgExts. Per altre informazioni, vedere Scrittura di estensioni WdbgExts.

L'API DbgEng può essere usata per creare estensioni o applicazioni autonome. L'API WdbgExts contiene un subset della funzionalità dell'API del motore del debugger e può essere usata solo dalle estensioni.

Tutte le estensioni del debugger devono essere compilate e compilate usando Visual Studio.

Gli esempi di codice di estensione vengono installati come parte del pacchetto Debug Tools for Windows se si esegue un'installazione personalizzata e si seleziona il componente SDK e tutti i relativi sottocomponenti. Sono disponibili nella sottodirectory sdk\samples della directory di installazione degli strumenti di debug per Windows.

Il modo più semplice per scrivere nuove estensioni del debugger consiste nello studio delle estensioni di esempio. Ogni estensione di esempio include file makefile e origini da usare con l'utilità Build. Entrambi i tipi di estensioni sono rappresentati negli esempi.

Scrittura di estensioni del debugger di analisi personalizzata

È possibile estendere le funzionalità del comando !analyze debugger scrivendo un plug-in di estensione di analisi. Fornendo un plug-in di estensione di analisi, è possibile partecipare all'analisi di un controllo di bug o a un'eccezione in modo specifico per il proprio componente o applicazione. Quando si scrive un plug-in di estensione di analisi, si scrive anche un file di metadati che descrive le situazioni per cui si vuole chiamare il plug-in. Quando !analizza viene eseguito, individua, carica ed esegue i plug-in dell'estensione di analisi appropriati. Per altre informazioni, vedere Scrittura di estensioni del debugger di analisi personalizzate

Personalizzazione dell'output del debugger tramite DML

È possibile personalizzare l'output del debugger usando DML. Per altre informazioni, vedere Personalizzazione dell'output del debugger tramite DML.

Uso di JavaScript per estendere le funzionalità del debugger

Usare JavaScript per creare script che comprendono gli oggetti debugger ed estendere e personalizzare le funzionalità del debugger. I provider JavaScript bridge un linguaggio di scripting al modello a oggetti interno del debugger. Il provider di scripting del debugger JavaScript consente l'uso di JavaScript con il debugger. Per altre informazioni, vedere Script del debugger JavaScript.

Sviluppare moduli di estendibilità del trasporto KDNET

Il trasporto KDNET può essere esteso per l'esecuzione in qualsiasi hardware tramite l'uso di una dll del modulo di estendibilità del driver hardware separato. I moduli di estendibilità del trasporto KDNET vengono sviluppati dai fornitori di schede di rete per aggiungere il supporto del debug del kernel a schede di rete specifiche.

KDNET è un trasporto di debug del kernel che consente il debug del kernel di windows su una rete. È progettato in modo che il livello di supporto hardware sia integrato in un modulo separato dall'elaborazione dei pacchetti di rete e dal livello di interfaccia del kernel. Questo livello di supporto driver hardware è denominato modulo di estendibilità KDNET. Per altre informazioni, vedere Sviluppare moduli di estendibilità del trasporto KDNET.