Attacher au programme

Une fois que vous avez inscrit vos programmes avec le port approprié, vous devez attacher le débogueur au programme que vous souhaitez déboguer.

Choisir comment attacher

Il existe trois façons dont le gestionnaire de débogage de session (SDM) tente d’attacher le programme en cours de débogage.

  1. Pour les programmes lancés par le moteur de débogage via la méthode LaunchSuspended (typique des langages interprétés, par exemple), le SDM obtient l’interface IDebugProgramNodeAttach2 à partir de l’objet IDebugProgramNode2 associé au programme attaché. Si le SDM peut obtenir l’interface IDebugProgramNodeAttach2 , le SDM appelle ensuite la méthode OnAttach . La IDebugProgramNodeAttach2::OnAttach méthode retourne S_OK pour indiquer qu’elle n’a pas attaché au programme et que d’autres tentatives peuvent être effectuées pour l’attacher au programme.

  2. Si le SDM peut obtenir l’interface IDebugProgramEx2 du programme attaché, le SDM appelle la méthode Attach . Cette approche est généralement destinée aux programmes qui ont été lancés à distance par le fournisseur de ports.

  3. Si le programme ne peut pas être attaché par le biais des méthodes ou des IDebugProgramNodeAttach2::OnAttach méthodes, le SDM charge le moteur de débogage (s’il n’est pas déjà chargé) en appelant la CoCreateInstance fonction, puis appelle la méthode Attach.IDebugProgramEx2::Attach Cette approche est typique des programmes lancés localement par un fournisseur de ports.

    Il est également possible pour un fournisseur de ports personnalisé d’appeler la IDebugEngine2::Attach méthode dans l’implémentation du fournisseur de ports personnalisé de la IDebugProgramEx2::Attach méthode. En règle générale, dans ce cas, le fournisseur de ports personnalisé lance le moteur de débogage sur l’ordinateur distant.

    La pièce jointe est obtenue lorsque le gestionnaire de débogage de session (SDM) appelle la méthode Attach .

    Si vous exécutez votre DE dans le même processus que l’application à déboguer, vous devez implémenter les méthodes suivantes d’IDebugProgramNode2 :

  • GetHostName

  • GetHostPid

  • GetProgramName

    Une fois la IDebugEngine2::Attach méthode appelée, procédez comme suit dans votre implémentation de la IDebugEngine2::Attach méthode :

  1. Envoyez un objet d’événement IDebugEngineCreateEvent2 au SDM. Pour plus d’informations, consultez Envoi d’événements.

  2. Appelez la méthode GetProgramId sur l’objet IDebugProgram2 passé à la IDebugEngine2::Attach méthode.

    Cela retourne un GUID élément utilisé pour identifier le programme. Doit GUID être stocké dans l’objet qui représente le programme local dans le DE, et il doit être retourné lorsque la IDebugProgram2::GetProgramId méthode est appelée sur l’interface IDebugProgram2 .

    Remarque

    Si vous implémentez l’interface IDebugProgramNodeAttach2GUID , le programme est transmis à la IDebugProgramNodeAttach2::OnAttach méthode. Cette méthode GUID est utilisée pour les IDebugProgram2::GetProgramId retours du GUID programme.

  3. Envoyez un objet d’événement IDebugProgramCreateEvent2 pour informer le SDM que l’objet local IDebugProgram2 a été créé pour représenter le programme au DE. Pour plus d’informations, consultez Envoi d’événements.

    Remarque

    Ce n’est pas le même IDebugProgram2 objet qui a été passé dans la IDebugEngine2::Attach méthode. L’objet précédemment passé IDebugProgram2 est reconnu par le port uniquement et est un objet distinct.