Partager via


Contrôle de l’exécution

Le moteur de débogage (DE) envoie généralement l’un des événements suivants comme dernier événement de démarrage :

  • Événement de point d’entrée, s’il s’attache à un programme nouvellement lancé

  • Événement load complete, si l’attachement à un programme en cours d’exécution est déjà en cours d’exécution

    Ces deux événements arrêtent les événements, ce qui signifie que le DE attend une réponse de l’utilisateur par le biais de l’IDE. Pour plus d’informations, consultez modes opérationnels.

Arrêt de l’événement

Lorsqu’un événement d’arrêt est envoyé à la session de débogage :

  1. Le programme et le thread qui contiennent le pointeur d’instruction actuel peuvent être obtenus à partir de l’interface d’événement.

  2. L’IDE détermine le fichier de code source et la position actuels, qu’il affiche comme mis en surbrillance dans l’éditeur.

  3. La session de débogage répond généralement à ce premier événement d’arrêt en appelant la méthode Continue du programme.

  4. Le programme s’exécute ensuite jusqu’à ce qu’il rencontre une condition d’arrêt, par exemple en appuyant sur un point d’arrêt. Dans ce cas, le DE envoie un événement de point d’arrêt à la session de débogage. L’événement de point d’arrêt est un événement d’arrêt, et le DE attend de nouveau une réponse utilisateur.

  5. Si l’utilisateur choisit d’entrer, de dépasser ou de sortir d’une fonction, l’IDE invite la session de débogage à appeler la méthode du Step programme. L’IDE passe ensuite l’unité d’étape (instruction, instruction ou ligne) et le type d’étape (qu’il s’agisse d’effectuer un pas à pas, d’un pas à pas ou à l’extérieur de la fonction). Une fois l’étape terminée, le DE envoie un événement d’exécution d’étape à la session de débogage, qui est un événement d’arrêt.

    -ou-

    Si l’utilisateur choisit de continuer à s’exécuter à partir du pointeur d’instruction actuel, l’IDE invite la session de débogage à appeler la méthode Execute du programme. Le programme reprend l’exécution jusqu’à ce qu’il rencontre la condition d’arrêt suivante.

    -ou-

    Si la session de débogage doit ignorer un événement d’arrêt particulier, la session de débogage appelle la méthode Continue du programme. Si le programme est entré, trop ou hors d’une fonction lorsqu’il a rencontré la condition d’arrêt, il poursuit l’étape.

    Par programmation, lorsque le DE rencontre une condition d’arrêt, il envoie ces événements d’arrêt comme IDebugLoadCompleteEvent2 ou IDebugEntryPointEvent2 au gestionnaire de débogage de session (SDM) au moyen d’une interface IDebugEventCallback2. Le DE transmet les interfaces IDebugProgram2 et IDebugThread2 qui représentent le programme et le thread contenant le pointeur d’instruction actuel. Le SDM appelle IDebugThread2 ::EnumFrameInfo pour obtenir le cadre de pile supérieur et appelle IDebugStackFrame2 ::GetDocumentContext pour obtenir le contexte de document associé au pointeur d’instruction actuel. Ce contexte de document est généralement un nom de fichier de code source, une ligne et un numéro de colonne. L’IDE les utilise pour mettre en surbrillance le code source qui contient le pointeur d’instruction actuel.

    Le SDM répond généralement à ce premier événement d’arrêt en appelant IDebugProgram2 ::Continue. Le programme s’exécute ensuite jusqu’à ce qu’il rencontre une condition d’arrêt, par exemple en appuyant sur un point d’arrêt, auquel cas le DE envoie une interface IDebugBreakpointEvent2 au SDM. L’événement de point d’arrêt est un événement d’arrêt, et le DE attend de nouveau une réponse utilisateur.

    Si l’utilisateur choisit d’entrer, de dépasser ou de sortir d’une fonction, l’IDE invite le SDM à appeler IDebugProgram2 ::Step. L’IDE transmet ensuite l’INSTRUCTION, l’instruction ou la ligne STEPUNIT et STEPKIND, autrement dit, qu’il s’agisse d’effectuer un pas à pas, d’un pas à pas ou à l’extérieur de la fonction. Une fois l’étape terminée, le DE envoie une interface IDebugStepCompleteEvent2 au SDM, qui est un événement d’arrêt.

    Si l’utilisateur choisit de continuer à s’exécuter à partir du pointeur d’instruction actuel, l’IDE demande au SDM d’appeler IDebugProgram2 ::Execute. Le programme reprend l’exécution jusqu’à ce qu’il rencontre la condition d’arrêt suivante.

    Si le package de débogage doit ignorer un événement d’arrêt particulier, le package de débogage appelle le SDM, qui appelle IDebugProgram2 ::Continue. Si le programme est entré, trop ou hors d’une fonction lorsqu’il a rencontré la condition d’arrêt, il poursuit l’étape. Cela implique que le programme conserve un état pas à pas, afin qu’il sache comment continuer.

    Les appels effectués par le SDM à Step, Exécuter et Continuer sont asynchrones, ce qui signifie que le SDM s’attend à ce que l’appel retourne rapidement. Si le DE envoie à SDM un événement d’arrêt sur le même thread avant Step, Execute ou Continue retourne, le SDM cesse de répondre.