Come inizializzare un debugger personalizzato nelle piattaforme per dispositivi mobili

I debugger di .NET personalizzati sono in genere ospitati in un processo separato. Le piattaforme mobili limitano o impediscono la creazione di tali processi, pertanto il componente debugger personalizzato sul lato di destinazione deve essere caricato nel processo dell'applicazione.

Questo articolo si applica solo all'inizializzazione del debugger su piattaforme mobili (iOS e Android) in .NET 11 e versioni successive. Non si applica a NativeAOT.

Implementare e distribuire il componente sul lato di destinazione

Il componente del debugger del lato destinazione deve essere implementato come libreria dinamica di profilazione con un punto di ingresso DllGetClassObject. Per le implementazioni di esempio, vedere gli esempi di profiler .NET.

Deve essere distribuito insieme alle librerie dinamiche libmscordbi e libmscordaccore come parte dell'applicazione in conformità ai requisiti di creazione di pacchetti, firma del codice e caricamento della libreria nativa della piattaforma di destinazione.

Caricare il componente sul lato di destinazione all'avvio

Per fare in modo che CoreCLR carichi il componente come profiler, specificare le impostazioni di ambiente seguenti prima dell'avvio del runtime:

Variabile di ambiente Value
DOTNET_ENABLE_PROFILING 1
DOTNET_PROFILER {<profiler-CLSID>}
DOTNET_PROFILER_PATH <component-path>

Sostituire <profiler-CLSID> con il GUID del profiler del componente e mantenere le parentesi graffe di inclusione. Sostituisci <component-path> con il percorso del componente nativo nella distribuzione dell'app di destinazione.

Per informazioni dettagliate su queste impostazioni, vedere Opzioni di configurazione del runtime per il debug e la profilatura.

Usare la configurazione di avvio delle app della piattaforma per fornire queste impostazioni.

Note

Anche se questa procedura usa il meccanismo del profiler per inizializzare un debugger, non stabilisce il supporto per utilizzo generico per i profiler di terze parti sulle piattaforme mobili.

Creare l'interfaccia del debugger

Nel componente di destinazione, eseguire la seguente inizializzazione:

  1. Carica la libreria dinamica libmscordbi e richiama la relativa esportazione CoreCLRCreateCordbObjectEx. Eseguire una query sull'oggetto restituito per ICorDebug.
  2. Chiamare ICorDebug::Initialize e registrare il gestore eventi gestiti con ICorDebug::SetManagedHandler.
  3. Connettersi all'applicazione con ICorDebug::DebugActiveProcess.

Per non perdere i primi eventi di caricamento dei moduli e di avvio, coordinare il collegamento con l'avvio del runtime in modo che l'esecuzione gestita non proceda prima del completamento di DebugActiveProcess.

Dopo l'inizializzazione, usare le interfacce del ICorDebug debugger come in altre piattaforme Unix.