Udostępnij za pośrednictwem


Dołączanie po uruchomieniu

Po uruchomieniu programu sesja debugowania jest gotowa do dołączenia aparatu debugowania (DE) do tego programu.

Decyzje projektowe

Ponieważ komunikacja jest łatwiejsza w udostępnionej przestrzeni adresowej, należy wybrać między dwoma podejściami projektowymi: ustawić komunikację między sesją debugowania a de. Możesz też ustawić komunikację między de i programem. Wybierz między następującymi elementami:

  • Jeśli bardziej sensowne jest skonfigurowanie komunikacji między sesją debugowania a de, sesja debugowania współtworzy de i prosi DE o dołączenie do programu. Ten projekt pozostawia sesję debugowania i de razem w jednej przestrzeni adresowej, a środowisko i program czasu wykonywania razem w innym.

  • Jeśli bardziej sensowne jest skonfigurowanie komunikacji między de i programem, środowisko czasu wykonywania współtworzy de. Ten projekt pozostawia sdM w jednej przestrzeni adresowej i DE, środowisko uruchomieniowe i program razem w innym. Ten projekt jest typowy dla de, który jest implementowany z interpreterem do uruchamiania języków skryptowych.

    Uwaga

    Sposób dołączania de do programu jest zależny od implementacji. Komunikacja między DE a programem jest również zależna od implementacji.

Implementacja

Programowo, gdy menedżer debugowania sesji (SDM) najpierw odbiera obiekt IDebugProgram2 , który reprezentuje program do uruchomienia, wywołuje metodę Attach , przekazując jej obiekt IDebugEventCallback2 , który jest później używany do przekazywania zdarzeń debugowania z powrotem do SDM. Następnie IDebugProgram2::Attach metoda wywołuje metodę OnAttach . Aby uzyskać więcej informacji na temat sposobu odebrania interfejsu przez IDebugProgram2 program SDM, zobacz Powiadamianie portu.

Jeśli de musi działać w tej samej przestrzeni adresowej co program, który debugujesz: ponieważ de jest zwykle częścią interpretera, który uruchamia skrypt, IDebugProgramNodeAttach2::OnAttach metoda zwraca wartość S_FALSE. Zwrot S_FALSE wskazuje, że proces dołączania został ukończony.

Jeśli jednak de działa w przestrzeni adresowej SDM: IDebugProgramNodeAttach2::OnAttach metoda zwraca S_OKwartość lub interfejs IDebugProgramNodeAttach2 nie jest w ogóle zaimplementowany w obiekcie IDebugProgramNode2 skojarzonym z programem debugowania. W takim przypadku metoda Attach zostanie ostatecznie wywołana, aby ukończyć operację dołączania.

W tym drugim przypadku należy wywołać metodę GetProgramId dla IDebugProgram2 obiektu, który został przekazany do IDebugEngine2::Attach metody, zapisać GUID obiekt w lokalnym obiekcie programu i zwrócić to GUID , gdy IDebugProgram2::GetProgramId metoda zostanie następnie wywołana dla tego obiektu. Element GUID służy do identyfikowania programu unikatowo w różnych składnikach debugowania.

W przypadku metody zwracającej IDebugProgramNodeAttach2::OnAttach S_FALSEmetodę , GUID parametr do użycia dla programu jest przekazywany do tej metody i jest IDebugProgramNodeAttach2::OnAttach to metoda ustawiana GUID dla obiektu programu lokalnego.

De jest teraz dołączony do programu i gotowy do wysyłania wszelkich zdarzeń startowych.