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.
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 . MetodaIDebugProgramNodeAttach2::OnAttach
powracaS_OK
, aby wskazać, że nie dołączyła do programu i że inne próby można dołączyć do programu.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.
Jeśli program nie może być dołączony za pomocą
IDebugProgramNodeAttach2::OnAttach
metod lubIDebugProgramEx2::Attach
, sdM ładuje aparat debugowania (jeśli jeszcze nie został załadowany), wywołującCoCreateInstance
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ówIDebugProgramEx2::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:
-
Po wywołaniu
IDebugEngine2::Attach
metody wykonaj następujące kroki w implementacjiIDebugEngine2::Attach
metody :
Wyślij obiekt zdarzenia IDebugEngineCreateEvent2 do zestawu SDM. Aby uzyskać więcej informacji, zobacz Wysyłanie zdarzeń.
Wywołaj metodę GetProgramId w obiekcie IDebugProgram2 przekazanym
IDebugEngine2::Attach
do metody .Spowoduje to zwrócenie elementu
GUID
używanego do identyfikowania programu. ElementGUID
musi być przechowywany w obiekcie, który reprezentuje program lokalny w de, i musi być zwracany, gdyIDebugProgram2::GetProgramId
metoda jest wywoływana w interfejsieIDebugProgram2
.Uwaga
W przypadku zaimplementowania interfejsu
IDebugProgramNodeAttach2
programGUID
jest przekazywany doIDebugProgramNodeAttach2::OnAttach
metody . Jest toGUID
używane w przypadku programuGUID
zwróconego przez metodęIDebugProgram2::GetProgramId
.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 doIDebugEngine2::Attach
metody . Wcześniej przekazany obiekt jest rozpoznawanyIDebugProgram2
tylko przez port i jest oddzielnym obiektem.