Przenieś wskaźnik wykonywania, aby zmienić przepływ wykonywania w debugerze
Podczas debugowania można ręcznie przenieść wskaźnik wykonywania, aby zmienić następną instrukcję, która zostanie uruchomiona dalej. Przeniesienie wskaźnika jest przydatne w sytuacjach, takich jak pomijanie kodu zawierającego znaną usterkę i jest bardziej zaawansowaną funkcją debugera.
Zmienianie przepływu wykonywania
Po wstrzymaniu debugera żółta strzałka na marginesie kodu źródłowego lub okna Dezasemblacja oznacza lokalizację instrukcji, która zostanie uruchomiona dalej. Możesz zmienić kolejną instrukcję, która zostanie uruchomiona, przenosząc tę strzałkę. Możesz pominąć kod lub wrócić do poprzedniego wiersza.
Jeśli chcesz zmienić następną instrukcję, która zostanie uruchomiona, debuger musi być w trybie przerwania. W oknie kodu źródłowego lub dezasemblacji przeciągnij żółtą strzałkę do innego wiersza lub kliknij prawym przyciskiem myszy wiersz, który chcesz uruchomić, a następnie wybierz pozycję Ustaw następną instrukcję.
Licznik programu przechodzi bezpośrednio do nowej lokalizacji. Instrukcje między starymi i nowymi punktami wykonywania nie są uruchamiane. Jeśli jednak przeniesiesz punkt wykonywania do tyłu, interweniujące instrukcje nie są cofane.
Uwaga
- Przeniesienie następnej instrukcji do innej funkcji lub zakresu zwykle powoduje uszkodzenie stosu wywołań, co powoduje błąd lub wyjątek w czasie wykonywania. Jeśli spróbujesz przenieść następną instrukcję do innego zakresu, debuger wyświetla ostrzeżenie i szansę anulowania operacji.
- W języku Visual Basic nie można przenieść następnej instrukcji do innego zakresu lub funkcji.
- W natywnym języku C++, jeśli włączono sprawdzanie środowiska uruchomieniowego, ustawienie następnej instrukcji może spowodować wyjątek, gdy wykonanie osiągnie koniec metody.
- Gdy opcja Edytuj i kontynuuj jest włączona, ustawienie następnej instrukcji kończy się niepowodzeniem, jeśli wprowadzono zmiany, których nie można od razu mapować, edytuj i kontynuuj. Taka sytuacja może wystąpić, na przykład jeśli kod został edytowany w bloku catch. W takim przypadku komunikat o błędzie informuje o tym, że operacja nie jest obsługiwana.
- W kodzie zarządzanym nie można przenieść następnej instrukcji, jeśli:
- Następna instrukcja znajduje się w innej metodzie niż bieżąca instrukcja.
- Debugowanie zostało uruchomione przez debugowanie just in time.
- Odwijenie stosu wywołań jest w toku.
- Zgłoszono wyjątek System.StackOverflowException lub System.Threading.ThreadAbortException.