Freigeben über


Anfügen an das Programm

Nachdem Sie Ihre Programme mit dem entsprechenden Port registriert haben, müssen Sie den Debugger an das Programm anfügen, das Sie debuggen möchten.

Auswählen des Anfügens

Es gibt drei Möglichkeiten, wie der Sitzungsdebugmanager (SESSION Debug Manager, SDM) versucht, an das zu debuggende Programm anzufügen.

  1. Für Programme, die vom Debugmodul über die LaunchSuspended-Methode gestartet werden (z. B. typisch für interpretierte Sprachen), ruft das SDM die IDebugProgramNodeAttach2-Schnittstelle aus dem IDebugProgramNode2-Objekt ab, das dem Programm zugeordnet ist, an das das Programm angefügt wird. Wenn die SDM die IDebugProgramNodeAttach2 Schnittstelle abrufen kann, ruft die SDM dann die OnAttach-Methode auf. Die IDebugProgramNodeAttach2::OnAttach Methode gibt S_OK zurück, um anzugeben, dass sie nicht an das Programm angefügt wurde und dass andere Versuche unternommen werden können, an das Programm anzufügen.

  2. Wenn das SDM die IDebugProgramEx2-Schnittstelle aus dem Programm abrufen kann, an das das Programm angefügt wird, ruft die SDM die Attach-Methode auf. Dieser Ansatz ist typisch für Programme, die vom Portanbieter remote gestartet wurden.

  3. Wenn das Programm nicht über die IDebugProgramNodeAttach2::OnAttach Methoden IDebugProgramEx2::Attach oder Methoden angefügt werden kann, lädt das SDM das Debugmodul (sofern nicht bereits geladen), indem die CoCreateInstance Funktion aufgerufen und dann die Attach-Methode aufgerufen wird. Dieser Ansatz ist typisch für Programme, die von einem Portanbieter lokal gestartet werden.

    Es ist auch möglich, dass ein benutzerdefinierter Portlieferant die IDebugEngine2::Attach Methode in der Implementierung der IDebugProgramEx2::Attach Methode des benutzerdefinierten Portlieferanten aufruft. In diesem Fall startet der benutzerdefinierte Portanbieter das Debugmodul auf dem Remotecomputer.

    Die Anlage wird erreicht, wenn der Sitzungsdebug-Manager (SDM) die Attach-Methode aufruft.

    Wenn Sie Ihre DE im selben Prozess wie die zu debuggende Anwendung ausführen, müssen Sie die folgenden Methoden von IDebugProgramNode2 implementieren:

  • GetHostName

  • GetHostPid

  • GetProgramName

    Führen Sie nach dem Aufrufen der IDebugEngine2::Attach Methode die folgenden Schritte in der Implementierung der IDebugEngine2::Attach Methode aus:

  1. Senden Sie ein IDebugEngineCreateEvent2-Ereignisobjekt an das SDM. Weitere Informationen finden Sie unter Senden von Ereignissen.

  2. Rufen Sie die GetProgramId-Methode für das IDebugProgram2-Objekt auf, das an die IDebugEngine2::Attach Methode übergeben wurde.

    Dies gibt ein GUID , das verwendet wird, um das Programm zu identifizieren. Das GUID Muss im Objekt gespeichert werden, das das lokale Programm für die DE darstellt, und es muss zurückgegeben werden, wenn die IDebugProgram2::GetProgramId Methode auf der IDebugProgram2 Schnittstelle aufgerufen wird.

    Hinweis

    Wenn Sie die IDebugProgramNodeAttach2 Schnittstelle implementieren, wird das Programm GUID an die IDebugProgramNodeAttach2::OnAttach Methode übergeben. Dies GUID wird für die von der IDebugProgram2::GetProgramId Methode zurückgegebenen Programme GUID verwendet.

  3. Senden Sie ein IDebugProgramCreateEvent2-Ereignisobjekt , um das SDM zu benachrichtigen, dass das lokale IDebugProgram2 Objekt erstellt wurde, um das Programm für die DE darzustellen. Ausführliche Informationen finden Sie unter Senden von Ereignissen.

    Hinweis

    Dies ist nicht dasselbe IDebugProgram2 Objekt, das an die IDebugEngine2::Attach Methode übergeben wurde. Das zuvor übergebene IDebugProgram2 Objekt wird nur vom Port erkannt und ist ein separates Objekt.