Share via


Attacher directement à un programme

Les utilisateurs qui souhaitent déboguer des programmes dans un processus déjà en cours d'exécution suivent généralement la procédure suivante :

  1. Dans l'IDE, ouvrez le menu Debug et sélectionnez la commande Attacher au processus...

    La boîte de dialogue Attacher au processus s'affiche et répertorie tous les moteurs de débogage (DE) installés sur la machine.

  2. Spécifiez les DE à utiliser pour déboguer le processus sélectionné, choisissez un processus et cliquez sur le bouton Attacher.

    Le package de débogage démarre une session de débogage et lui transmet la liste des DE. La session de débogage transmet à son tour cette liste, ainsi qu'une fonction de rappel, au processus sélectionné, puis demande au processus d'énumérer ses programmes en cours d'exécution.

    En réponse à la requête de l'utilisateur, le package de débogage instancie le gestionnaire de débogage de session (SDM) et lui transmet la liste des DE sélectionnées. En plus de la liste, le package de débogage transmet au SDM une interface IDebugEventCallback2. Le package de débogage transmet la liste des DE au processus sélectionné en appelant IDebugProcess2::Attach. Le SDM appelle ensuite IDebugProcess2::EnumPrograms sur le port pour énumérer les programmes en cours d'exécution dans le processus.

    À partir de ce moment, chaque moteur de débogage est attaché à un programme exactement comme indiqué dans la section Attacher après un lancement, à deux exceptions près.

    Par souci d'efficacité, les DE qui sont mises en œuvre pour partager un espace d'adressage avec le SDM sont regroupées de manière à ce que chaque DE dispose d'un ensemble de programmes auxquels elle s'attachera. Dans ce cas, IDebugProcess2 appelle IDebugEngine2::Attach et lui transmet un tableau de programmes auxquels s'attacher.

    La deuxième exception est que les événements de démarrage envoyés par une DE qui s'attache à un programme déjà en cours d'exécution n'incluent généralement pas l'événement du point d'entrée.