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.

AkcjaVisual StudioVS Code
Start debugowaniaF5F5
Krok dalej (over)F10F10
Wejdź do metody (into)F11F11
Wyjdź z metody (out)Shift+F11Shift+F11
KontynuujF5F5

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.