Debugowanie (breakpointy, watch, call stack)
Po co debugger, skoro jest Console.WriteLine
Logi to gruba siekiera. Debugger pozwala zatrzymać program w dowolnym miejscu, obejrzeć każdą zmienną i prześledzić, jak sterowanie tu dotarło — bez przebudowy i bez zaśmiecania kodu. To pierwsze narzędzie, po które sięgasz, gdy "działa inaczej niż myślę".
Breakpointy
Kliknij na marginesie obok numeru linii (lub F9), by ustawić breakpoint.
Program zatrzyma się przed jej wykonaniem.
| Akcja | Visual Studio | VS Code |
|---|---|---|
| Start debugowania | F5 | F5 |
| Krok dalej (over) | F10 | F10 |
| Wejdź do metody (into) | F11 | F11 |
| Wyjdź z metody (out) | Shift+F11 | Shift+F11 |
| Kontynuuj | F5 | F5 |
Breakpointy warunkowe
Nie zatrzymuj się przy każdej iteracji. Kliknij breakpoint prawym → Conditions
i podaj warunek, np. userId == 4071. Program stanie tylko wtedy, gdy warunek
jest prawdziwy — bezcenne przy pętli po tysiącach rekordów.
Możesz też ustawić Hit Count (zatrzymaj przy 50. trafieniu) albo Action / Tracepoint — log do okna Output bez zatrzymywania programu.
Watch i podgląd zmiennych
W trybie debugowania najedź na zmienną, by zobaczyć jej wartość. Do stałego podglądu dodaj wyrażenie w oknie Watch. Okno Locals pokazuje wszystkie zmienne w bieżącym zakresie, a Autos — te użyte w okolicy.
// Zatrzymaj na tej linii i dodaj 'order.Total' oraz 'order.Items.Count' do Watch
var summary = CalculateSummary(order);
W oknie Immediate (Visual Studio) lub Debug Console (VS Code) możesz wpisywać wyrażenia w trakcie pauzy — np. wywołać metodę i zobaczyć wynik.
Call stack — jak tu trafiłem
Okno Call Stack pokazuje łańcuch wywołań aż do bieżącego punktu. Klikając ramkę, przeskakujesz do kodu wywołującego i widzisz jego zmienne lokalne. To kluczowe przy diagnozowaniu wyjątków — pokazuje, kto przekazał złą wartość.
Wskazówka: Gdy złapiesz wyjątek, otwórz Call Stack i idź w dół, aż znajdziesz ostatnią linię Twojego kodu. Tam zwykle leży przyczyna, a nie w bibliotece.
Debugowanie frontendu ZEUS w VS Code
Dla Next.js skonfiguruj .vscode/launch.json i debuguj z breakpointami w
kodzie TypeScript:
{
"version": "0.2.0",
"configurations": [
{
"name": "Next.js: debug server",
"type": "node-terminal",
"request": "launch",
"command": "npm run dev"
}
]
}
Podsumowanie
Breakpoint mówi gdzie, Watch mówi co, a Call Stack mówi jak tu doszło. Opanowanie breakpointów warunkowych i czytania stosu wywołań skraca czas diagnozy z godzin do minut — i działa identycznie w backendzie .NET, jak i we frontendzie ZEUS.