Kontrola wykonywania
Aparat debugowania (DE) zwykle wysyła jedno z następujących zdarzeń jako ostatnie zdarzenie uruchamiania:
Zdarzenie punktu wejścia, jeśli dołączane do nowo uruchomionego programu
Zdarzenie ukończenia ładowania, jeśli dołączanie do programu, który jest już uruchomiony
Oba te zdarzenia zatrzymują zdarzenia, co oznacza, że de czeka na odpowiedź od użytkownika za pomocą środowiska IDE. Aby uzyskać więcej informacji, zobacz Tryby operacyjne.
Zatrzymywanie zdarzenia
Po wysłaniu zdarzenia zatrzymania do sesji debugowania:
Program i wątek zawierający bieżący wskaźnik instrukcji można uzyskać z interfejsu zdarzenia.
Środowisko IDE określa bieżący plik i pozycję kodu źródłowego, który jest wyświetlany jako wyróżniony w edytorze.
Sesja debugowania zwykle reaguje na to pierwsze zatrzymanie zdarzenia, wywołując metodę Continue programu.
Następnie program jest uruchamiany do momentu napotkania warunku zatrzymania, takiego jak trafienie punktu przerwania. W tym przypadku de wysyła zdarzenie punktu przerwania do sesji debugowania. Zdarzenie punktu przerwania jest zdarzeniem zatrzymania, a de ponownie czeka na odpowiedź użytkownika.
Jeśli użytkownik zdecyduje się przejść do funkcji lub poza jej działaniem, środowisko IDE wyświetli monit o wywołanie metody programu
Step
przez środowisko IDE. Następnie środowisko IDE przekazuje jednostkę kroku (instrukcję, instrukcję lub wiersz) oraz typ kroku (niezależnie od tego, czy należy przejść do funkcji, przejść do lub z funkcji). Po zakończeniu kroku de wysyła zdarzenie ukończenia kroku do sesji debugowania, która jest zdarzeniem zatrzymania.— lub —
Jeśli użytkownik zdecyduje się kontynuować wykonywanie z bieżącego wskaźnika instrukcji, środowisko IDE monituje sesję debugowania o wywołanie metody Execute programu. Program wznawia wykonywanie, dopóki nie napotka następnego warunku zatrzymania.
— lub —
Jeśli sesja debugowania ma ignorować określone zdarzenie zatrzymania, sesja debugowania wywołuje metodę Continue programu. Jeśli program przechodził do funkcji lub poza nią, gdy napotkał warunek zatrzymania, to kontynuuje krok.
Programowo, gdy de napotka warunek zatrzymania, wysyła takie zdarzenia zatrzymania, jak IDebugLoadCompleteEvent2 lub IDebugEntryPointEvent2 do menedżera debugowania sesji (SDM) za pomocą interfejsu IDebugEventCallback2. De przekazuje interfejsy IDebugProgram2 i IDebugThread2 , które reprezentują program i wątek zawierający bieżący wskaźnik instrukcji. Narzędzie SDM wywołuje element IDebugThread2::EnumFrameInfo , aby uzyskać górną ramkę stosu i wywołuje element IDebugStackFrame2::GetDocumentContext , aby uzyskać kontekst dokumentu skojarzony z bieżącym wskaźnikiem instrukcji. Ten kontekst dokumentu jest zazwyczaj nazwą pliku kodu źródłowego, wierszem i numerem kolumny. Środowisko IDE używa tych elementów do wyróżniania kodu źródłowego zawierającego bieżący wskaźnik instrukcji.
SdM zwykle reaguje na to pierwsze zatrzymanie zdarzenia przez wywołanie IDebugProgram2::Continue. Następnie program jest uruchamiany do momentu napotkania stanu zatrzymania, takiego jak trafienie punktu przerwania, w takim przypadku de wysyła interfejs IDebugBreakpointEvent2 do sdM. Zdarzenie punktu przerwania jest zdarzeniem zatrzymania, a de ponownie czeka na odpowiedź użytkownika.
Jeśli użytkownik zdecyduje się przejść do funkcji lub poza jej działaniem, środowisko IDE wyświetli monit o wywołanie programu IDebugProgram2::Step przez środowisko IDE. Następnie środowisko IDE przekazuje element STEPUNIT (instrukcję, instrukcję lub wiersz) i STEPKIND, czyli krok do funkcji, czy też z funkcji. Po zakończeniu kroku de wysyła interfejs IDebugStepCompleteEvent2 do sdM, który jest zdarzeniem zatrzymania.
Jeśli użytkownik zdecyduje się kontynuować wykonywanie z bieżącego wskaźnika instrukcji, środowisko IDE prosi sdM o wywołanie programu IDebugProgram2::Execute. Program wznawia wykonywanie, dopóki nie napotka następnego warunku zatrzymania.
Jeśli pakiet debugowania ma ignorować określone zdarzenie zatrzymania, pakiet debugowania wywołuje sdM, który wywołuje program IDebugProgram2::Continue. Jeśli program przechodził do funkcji lub poza nią, gdy napotkał warunek zatrzymania, kontynuuje ten krok. Oznacza to, że program utrzymuje stan kroku, dzięki czemu wie, jak kontynuować.
Wywołania sdM wykonywane do
Step
, Execute i Continue są asynchroniczne, co oznacza, że SDM oczekuje, że wywołanie zostanie zwrócone szybko. Jeśli de wysyła SDM zdarzenie zatrzymania w tym samym wątku przedStep
, Wykonaj lub Kontynuuj powróci, SDM przestanie odpowiadać.