Udostępnij za pośrednictwem


Dołączanie do programu

Po zarejestrowaniu programów przy użyciu odpowiedniego portu należy dołączyć debuger do programu, który chcesz debugować.

Wybieranie sposobu dołączania

Istnieją trzy sposoby, na które menedżer debugowania sesji (SDM) próbuje dołączyć do debugowanego programu.

  1. W przypadku programów uruchamianych przez aparat debugowania za pośrednictwem metody LaunchSuspended (typowej dla interpretowanych języków, na przykład), sdM uzyskuje interfejs IDebugProgramNodeAttach2 z obiektu IDebugProgramNode2 skojarzonego z dołączonym programem. Jeśli sdM może uzyskać IDebugProgramNodeAttach2 interfejs, SDM wywołuje metodę OnAttach . Metoda IDebugProgramNodeAttach2::OnAttach powraca S_OK , aby wskazać, że nie dołączyła do programu i że inne próby można dołączyć do programu.

  2. Jeśli sdM może uzyskać interfejs IDebugProgramEx2 z dołączonego programu, SDM wywołuje metodę Attach . Takie podejście jest typowe w przypadku programów, które zostały uruchomione zdalnie przez dostawcę portów.

  3. Jeśli program nie może być dołączony za pomocą IDebugProgramNodeAttach2::OnAttach metod lub IDebugProgramEx2::Attach , sdM ładuje aparat debugowania (jeśli jeszcze nie został załadowany), wywołując CoCreateInstance funkcję, a następnie wywołuje metodę Attach . Takie podejście jest typowe dla programów uruchamianych lokalnie przez dostawcę portów.

    Istnieje również możliwość wywołania IDebugEngine2::Attach metody przez niestandardowego dostawcę portów w implementacji metody niestandardowego dostawcy portów IDebugProgramEx2::Attach . Zazwyczaj w tym przypadku niestandardowy dostawca portów uruchamia aparat debugowania na maszynie zdalnej.

    Załącznik jest osiągany, gdy menedżer debugowania sesji (SDM) wywołuje metodę Attach .

    Jeśli uruchomisz de w tym samym procesie co aplikacja do debugowania, musisz zaimplementować następujące metody IDebugProgramNode2:

  1. Wyślij obiekt zdarzenia IDebugEngineCreateEvent2 do zestawu SDM. Aby uzyskać więcej informacji, zobacz Wysyłanie zdarzeń.

  2. Wywołaj metodę GetProgramId w obiekcie IDebugProgram2 przekazanym IDebugEngine2::Attach do metody .

    Spowoduje to zwrócenie elementu GUID używanego do identyfikowania programu. Element GUID musi być przechowywany w obiekcie, który reprezentuje program lokalny w de, i musi być zwracany, gdy IDebugProgram2::GetProgramId metoda jest wywoływana w interfejsie IDebugProgram2 .

    Uwaga

    W przypadku zaimplementowania interfejsu IDebugProgramNodeAttach2 program GUID jest przekazywany do IDebugProgramNodeAttach2::OnAttach metody . Jest to GUID używane w przypadku programu GUID zwróconego przez metodę IDebugProgram2::GetProgramId .

  3. Wyślij obiekt zdarzenia IDebugProgramCreateEvent2, aby powiadomić SDM, że obiekt lokalny IDebugProgram2 został utworzony w celu reprezentowania programu w de. Aby uzyskać szczegółowe informacje, zobacz Wysyłanie zdarzeń.

    Uwaga

    Nie jest to ten sam IDebugProgram2 obiekt, który został przekazany do IDebugEngine2::Attach metody . Wcześniej przekazany obiekt jest rozpoznawany IDebugProgram2 tylko przez port i jest oddzielnym obiektem.