Udostępnij przez


Sesja debugowania i model wykonywania

Aparat debugera może debugować wiele obiektów docelowych jednocześnie. Sesja debugowania rozpoczyna się, gdy silnik uzyskuje cel i kontynuuje się do momentu, gdy odrzucone zostaną wszystkie cele. Sesja debugowania jest niedostępna , gdy obiekty docelowe są wykonywane i dostępne , gdy bieżący element docelowy jest zawieszony. Aparat może służyć tylko do badania obiektów docelowych i manipulowania nimi, gdy sesja jest dostępna.

Pętla główna debugera zwykle składa się z ustawiania stanu wykonywania, wywoływania metody WaitForEvent i obsługi wygenerowanych zdarzeń. Po wywołaniu metody WaitForEvent sesja stanie się niedostępna.

Gdy zdarzenie występuje w obiekcie docelowym, silnik zawiesza wszystkie obiekty docelowe, a sesja jest dostępna. Następnie silnik powiadamia procedury obsługi zdarzeń o zdarzeniu i postępuje zgodnie z regułami filtru zdarzeń. Wywołania zwrotne zdarzeń i filtry zdarzeń określają, w jaki sposób powinno przebiegać wykonywanie w obiekcie docelowym. Jeśli ustalą, że aparat powinien włamać się do debugera, metoda WaitForEvent zwraca wartość , a sesja pozostaje dostępna; W przeciwnym razie aparat wznowi wykonywanie obiektu docelowego w sposób określony przez wywołania zwrotne zdarzeń i filtry zdarzeń, a sesja stanie się ponownie niedostępna.

Czas trwania wywołania WaitForEvent — w szczególności podczas powiadamiania procedur zwrotnych zdarzeń i przetwarzania reguł filtra — aparat jest w stanie zwanym "w stanie oczekiwania". Chociaż w tym stanie nie można wywołać WaitForEvent (nie jest reentrantna).

Istnieją dwa kroki związane z inicjowaniem wykonywania w obiekcie docelowym: ustawienie stanu wykonania, a następnie wywołanie metody WaitForEvent. Stan wykonywania można ustawić przy użyciu metody SetExecutionStatus lub wykonując polecenie debugera, które ustawia stan wykonania — na przykład g(Go) i p (Krok).

Jeśli sekwencja poleceń debugera jest wykonywana razem — na przykład "g ; ? @$ip"- niejawne oczekiwanie nastąpi po każdym poleceniu, które wymaga wykonania w obiekcie docelowym, jeśli to polecenie nie jest ostatnim poleceniem w sekwencji. Niejawne oczekiwanie nie może wystąpić, gdy mechanizm debugowania znajduje się w stanie "podczas oczekiwania"; w tym przypadku wykonanie poleceń zostanie zatrzymane, a bieżące polecenie — to, które próbowało spowodować niejawne oczekiwanie — zostanie zinterpretowane jako instrukcja dotycząca kontynuacji wykonania w obiekcie docelowym. Pozostałe polecenia zostaną odrzucone.

Uwaga Podczas określania dostępności sesji, ograniczone wykonanie obiektu docelowego (na przykład krok po kroku) jest uznawane za wykonanie przez silnik. Po zakończeniu wykonywania w trybie ograniczonym sesja stanie się dostępna.

Aparat hosta

Podczas zdalnego debugowania można użyć wielu wystąpień silnika debuggera. Dokładnie jedno z tych wystąpień utrzymuje sesję debugowania; to wystąpienie jest nazywane silnikiem hosta.

Wszystkie operacje debugera są związane z aparatem hosta, na przykład ładowanie symboli i rozszerzeń.