Depanează un test eșuat cu un agent
Acest ghid arată cum să pui un agent să folosească un depanator pentru o defecțiune pe care instrucțiunile de tipărire nu o explică.
Instrumentul debug conduce o sesiune reală Debug Adapter Protocol. Un cadru oprit răspunde deodată la orice întrebare despre acel moment — fiecare variabilă locală, fiecare apelant și o expresie evaluată în scopul propriu al cadrului —, în timp ce o instrucțiune de tipărire răspunde doar la întrebarea la care te-ai gândit înainte de a rula.
Înainte de a începe
Secțiune intitulată „Înainte de a începe”Instrumentul rămâne pe suprafață, astfel încât agentul să poată întreba de ce nimic nu este utilizabil, în loc să ghicească. Un adaptor poate porni cu adevărat doar atunci când ambele condiții de mai jos sunt îndeplinite:
- un marker de proiect în copia locală și
- binarul adaptorului se rezolvă.
Cere agentului să verifice:
debug(op: "adapters")Răspunde cu ce a găsit sau explică faptul că un adaptor are nevoie de ambele jumătăți.
| Limbaj | Adaptor | Marker | Instalare |
|---|---|---|---|
| Dart / Flutter | dart debug_adapter |
pubspec.yaml |
Vine cu SDK-ul — nimic de făcut |
| Python | python3 -m debugpy.adapter |
pyproject.toml, setup.py, requirements.txt |
pip install debugpy |
| Rust / C / C++ | lldb-dap |
Cargo.toml, CMakeLists.txt |
Vine cu LLVM |
| Go | dlv dap |
go.mod |
go install github.com/go-delve/delve/cmd/dlv@latest |
Setează mai întâi punctul de întrerupere, apoi lansează
Secțiune intitulată „Setează mai întâi punctul de întrerupere, apoi lansează”Ordinea contează, iar instrumentul o impune: punctele de întrerupere pot fi setate înainte de a exista o sesiune, pentru că aceasta este secvența cerută de protocol.
Cere agentului ceva de genul:
Funcția
computedinbin/main.dartreturnează o valoare greșită. Setează un punct de întrerupere pe linia care atribuieproduct, lansează-o sub depanator și spune-mi ce sunt de faptașib.
Va rula, aproximativ:
debug(op: "breakpoints", file: "bin/main.dart", lines: [7])debug(op: "launch", program: "bin/main.dart")Lansarea raportează unde s-a oprit:
Launched bin/main.dart on dart (session dart-1). Stopped: breakpoint. Use `stack` to see where.Citește cadrul
Secțiune intitulată „Citește cadrul”debug(op: "stack")→ #1 compute (bin/main.dart:7:3) #2 main (bin/main.dart:2:18)Apoi pătrunde în el:
debug(op: "scopes", frame_id: 1)→ Locals (reference 12)
debug(op: "variables", reference: 12)→ a (int) = 6 b (int) = 7 product (int) = 42Un obiect cu noduri copil raportează [expand: reference N] — dar numai când există cu adevărat ceva în spate, așa că o extindere pe care agentul nu o poate folosi nu este niciodată oferită.
Pentru orice nu este vizibil ca variabilă locală:
debug(op: "evaluate", expression: "config.timeout.inSeconds", frame_id: 1)Parcurge pas cu pas
Secțiune intitulată „Parcurge pas cu pas”| Ce vrei să faci | Operație |
|---|---|
| Rulează până la următoarea oprire | continue |
| Linia următoare, în același cadru | step_over |
| Intră în apel | step_in |
| Ieși la apelant | step_out |
| Oprește un program care rulează | pause |
Atașează-te la ceva care rulează deja
Secțiune intitulată „Atașează-te la ceva care rulează deja”Pentru un proces blocat, nu pentru unul pe care îl pornești:
debug(op: "attach", port: 5858)Încheiere
Secțiune intitulată „Încheiere”debug(op: "terminate")Încheie întotdeauna sesiunea. Un adaptor de depanare deține un proces oprit care ține tot ce ține procesul respectiv — un port, o blocare, o conexiune la baza de date.
Ieșire delimitată
Secțiune intitulată „Ieșire delimitată”O extindere variables pe un graf de obiecte adânc este nelimitată prin natura ei — un singur widget Flutter ajunge la întregul arbore de elemente. Copiii per scop sunt plafonați la 50, valorile la 400 de caractere, iar cadrele de stivă la 30. Un rezultat de instrument care umple fereastra de context este un instrument care încheie rularea pe care o ajuta.
- Intelligence pentru cod — de ce un depanator, un compilator și un potrivitor răspund la întrebări diferite
- Instrumente agent integrate — fiecare operație
debugși argumentul ei - Diagnostichează un agent — când problema este agentul, nu codul