Condividi tramite


Avviare un programma

Gli utenti che desiderano eseguire il debug di un programma possono premere F5 per eseguire il debugger dall'IDE. Inizia una serie di eventi che in definitiva comportano la connessione dell'IDE a un motore di debug (DE), che a sua volta è connesso o collegato, al programma come indicato di seguito:

  1. L'IDE chiama innanzitutto il pacchetto di progetto per ottenere le impostazioni di debug del progetto attivo della soluzione. Le impostazioni includono la directory iniziale, le variabili di ambiente, la porta in cui verrà eseguito il programma e il DE da usare per creare il programma, se specificato. Queste impostazioni vengono passate al pacchetto di debug.

  2. Se viene specificato un DE, de chiama il sistema operativo per avviare il programma. Come conseguenza dell'avvio del programma, viene caricato l'ambiente di runtime del programma. Ad esempio, se un programma viene scritto in MSIL, Common Language Runtime verrà richiamato per eseguire il programma.

    oppure

    Se non viene specificato un DE, la porta chiama il sistema operativo per avviare il programma, causando il caricamento dell'ambiente di runtime del programma.

    Nota

    Se un DE viene usato per avviare un programma, è probabile che lo stesso DE verrà collegato al programma.

  3. A seconda che la porta DE o la porta abbia avviato il programma, de o l'ambiente di runtime crea quindi una descrizione del programma o un nodo e notifica alla porta che il programma è in esecuzione.

    Nota

    È consigliabile che l'ambiente di runtime crei il nodo del programma, perché il nodo del programma è una rappresentazione leggera di un programma che può essere sottoposto a debug. Non è necessario caricare un intero DE solo per creare e registrare un nodo del programma. Se l'IDE è progettato per l'esecuzione nel processo dell'IDE, ma non è effettivamente in esecuzione alcun IDE, è necessario che sia presente un componente in grado di aggiungere un nodo programma alla porta.

    Il programma appena creato, insieme a qualsiasi altro programma, correlato o non correlato, avviato o collegato allo stesso IDE, comporre una sessione di debug.

    A livello di codice, quando l'utente preme F5, il pacchetto di debug di Visual Studio chiama il pacchetto di progetto (associato al tipo di programma avviato) tramite il DebugLaunch metodo , che a sua volta compila una VsDebugTargetInfo2 struttura con le impostazioni di debug del progetto attive della soluzione. Questa struttura viene passata di nuovo al pacchetto di debug tramite una chiamata al LaunchDebugTargets2 metodo . Il pacchetto di debug crea quindi un'istanza di Session Debug Manager (SDM), che avvia il programma di cui è in corso il debug e tutti i motori di debug associati.

    Uno degli argomenti passati al SDM è il GUID della DE da usare per avviare il programma.

    Se il GUID DE non GUID_NULLè , il SDM crea la de e quindi chiama il metodo LaunchSuspended per avviare il programma. Ad esempio, se un programma viene scritto nel codice nativo, IDebugEngineLaunch2::LaunchSuspended probabilmente chiamerà CreateProcess e ResumeThread (funzioni Win32) per eseguire il programma.

    Come conseguenza dell'avvio del programma, viene caricato l'ambiente di runtime del programma. De o l'ambiente di runtime crea quindi un'interfaccia IDebugProgramNode2 per descrivere il programma e passa questa interfaccia a AddProgramNode per notificare alla porta che il programma è in esecuzione.

    Se GUID_NULL viene passato, la porta avvia il programma. Quando il programma è in esecuzione, l'ambiente di runtime crea un'interfaccia IDebugProgramNode2 per descrivere il programma e passarlo a IDebugPortNotify2::AddProgramNode. In questo modo viene notificata la porta che il programma è in esecuzione. Il modello SDM collega quindi il motore di debug al programma in esecuzione.

In questa sezione

La notifica alla porta spiega cosa accade dopo l'avvio di un programma e la porta viene notificata.

Allegare dopo un documento di avvio quando la sessione di debug è pronta per collegare il de al programma.

  • Le attività di debug contengono collegamenti a varie attività di debug, ad esempio l'avvio di un programma e la valutazione delle espressioni.