Condividi tramite


Controllo dell'esecuzione

Il motore di debug invia in genere uno degli eventi seguenti come ultimo evento di avvio:

  • Evento del punto di ingresso, se collegato a un programma appena avviato

  • Evento di caricamento completo, se collegato a un programma già in esecuzione

    Entrambi questi eventi arrestano gli eventi, ovvero l'IDE attende una risposta dall'utente tramite l'IDE. Per altre informazioni, vedere Modalità operative.

Arresto dell'evento

Quando viene inviato un evento di arresto alla sessione di debug:

  1. Il programma e il thread che contengono il puntatore di istruzioni corrente possono essere ottenuti dall'interfaccia dell'evento.

  2. L'IDE determina il file e la posizione del codice sorgente corrente, che viene visualizzato come evidenziato nell'editor.

  3. La sessione di debug risponde in genere a questo primo evento di arresto chiamando il metodo Continue del programma.

  4. Il programma viene quindi eseguito fino a quando non rileva una condizione di arresto, ad esempio il raggiungimento di un punto di interruzione. In tal caso, de de invia un evento di punto di interruzione alla sessione di debug. L'evento del punto di interruzione è un evento di arresto e il de attende di nuovo una risposta dell'utente.

  5. Se l'utente sceglie di eseguire l'istruzione, l'over o l'esterno di una funzione, l'IDE richiede alla sessione di debug di chiamare il metodo del Step programma. L'IDE passa quindi l'unità di passaggio (istruzione, istruzione o riga) e il tipo di passaggio (se eseguire l'istruzione, l'over o l'esterno della funzione). Al termine del passaggio, il de invia un evento di completamento del passaggio alla sessione di debug, ovvero un evento di arresto.

    -o-

    Se l'utente sceglie di continuare l'esecuzione dal puntatore all'istruzione corrente, l'IDE richiede alla sessione di debug di chiamare il metodo Execute del programma. Il programma riprende l'esecuzione fino a quando non rileva la condizione di arresto successiva.

    -o-

    Se la sessione di debug deve ignorare un particolare evento di arresto, la sessione di debug chiama il metodo Continue del programma. Se il programma esegue l'istruzione in ingresso, over o out di una funzione quando ha rilevato la condizione di arresto, continua il passaggio.

    A livello di codice, quando de rileva una condizione di arresto, invia eventi di arresto come IDebugLoadCompleteEvent2 o IDebugEntryPointEvent2 al gestore di debug della sessione (SDM) tramite un'interfaccia IDebugEventCallback2 . La de passa le interfacce IDebugProgram2 e IDebugThread2 che rappresentano il programma e il thread contenente il puntatore di istruzioni corrente. SDM chiama IDebugThread2::EnumFrameInfo per ottenere il frame dello stack superiore e chiama IDebugStackFrame2::GetDocumentContext per ottenere il contesto del documento associato al puntatore all'istruzione corrente. Questo contesto di documento è in genere un nome, una riga e un numero di colonna del codice sorgente. L'IDE usa questi elementi per evidenziare il codice sorgente che contiene il puntatore all'istruzione corrente.

    Il SDM risponde in genere a questo primo evento di arresto chiamando IDebugProgram2::Continue. Il programma viene quindi eseguito fino a quando non rileva una condizione di arresto, ad esempio il raggiungimento di un punto di interruzione, nel qual caso de invia un'interfaccia IDebugBreakpointEvent2 al SDM. L'evento del punto di interruzione è un evento di arresto e il de attende di nuovo una risposta dell'utente.

    Se l'utente sceglie di eseguire l'istruzione, l'over o l'esterno di una funzione, l'IDE chiede al SDM di chiamare IDebugProgram2::Step. L'IDE passa quindi STEPUNIT (istruzione, istruzione o riga) e STEPKIND, ovvero se eseguire l'istruzione, l'over o l'esterno della funzione. Al termine del passaggio, de invia un'interfaccia IDebugStepCompleteEvent2 a SDM, che è un evento di arresto.

    Se l'utente sceglie di continuare l'esecuzione dal puntatore all'istruzione corrente, l'IDE chiede al SDM di chiamare IDebugProgram2::Execute. Il programma riprende l'esecuzione fino a quando non rileva la condizione di arresto successiva.

    Se il pacchetto di debug deve ignorare un particolare evento di arresto, il pacchetto di debug chiama SDM, che chiama IDebugProgram2::Continue. Se il programma esegue l'istruzione, l'over o l'esterno di una funzione quando ha rilevato la condizione di arresto, continua il passaggio. Ciò implica che il programma mantiene uno stato di esecuzione, in modo che sappia come continuare.

    Le chiamate effettuate da SDM a Step, Execute e Continue sono asincrone, il che significa che SDM prevede che la chiamata venga restituita rapidamente. Se l'istruzione DE invia all'SDM un evento di arresto nello stesso thread prima Stepdi , Execute o Continue restituisce , sDM smette di rispondere.