V8 trucuri de depanare


Cuvinte cheie: depanator, depanare, management,
breakpoint, execuție pas-cu-pas


Cei care au lucrat vreodată cu depanatorul VBA,
astfel încât în ​​1C puteți schimba valorile variabilelor și puteți merge în orice punct al codului.

Nu promit nimic, dar unele opțiuni sunt disponibile cu ajutorul intervențiilor cosmetice în configurație.

Funcția de la distanță

Această funcție vă permite să executați în orice moment orice cod în limba 1C peste orice date transmise către acesta.

exemple:
= Spune ceva text

= Atribuie valoarea variabilă a erorii la true

= În debugger, nu puteți apela procedura, dar puteți face acest lucru prin intermediul telecomenzii:

Atribuiți funcția

Toată lumea știe că în 1C80 este imposibil să schimbăm valorile variabilelor, chiar dacă depanare.
Cu toate acestea, există o cale de ieșire!
În modulul general, declarați o funcție:

Acum puteți atribui valoarea variabilei în orice moment.

Depanarea într-o configurație tipică

Și ce ar trebui să faceți dacă ați depanat o configurație care nu are aceste caracteristici extraordinare?

Este foarte simplu. Creați procesarea externă, puneți aceste funcții în modulul cu cuvântul cheie de export și apelați-le astfel:

Manipularea stivei.

Pentru mine a fost o surpriză plăcută când am descoperit că puteți urmări variabilele la diferite niveluri ale stack-ului.

Trebuie să deschideți fereastra stivă (Ctrl + F3), să mergeți la nivelul dorit și să introduceți numele variabilei pe ecran.
Cea mai bună modalitate este de a examina exemplul unei funcții recursive:


Puneți un punct de întrerupere în această funcție și veți vedea că la niveluri diferite de stivă, variabila A are valori diferite.

Întreruperea programului

Din nefericire, în 1C 80 puteți opri lucrul unor coduri care se opresc
lucra numai 1C: întreprinderi. Așa că, pentru a spune, pentru a lupta împotriva durerilor de cap, trebuie să vă tăiați capul.

Dar nu totul e atât de rău.

Folosind funcția Assign, puteți atribui un obiect critic al programului valoarea Undefined sau zero și imediat ce programul încearcă să obțină recuzita sau metoda acestui obiect va exista o eroare și codul va înceta să funcționeze.
De exemplu, sunteți într-un punct:


Acum, de îndată ce codul ajunge la linia cu "Dacă", va apărea o eroare și execuția se va opri.

Uneori, când depanem funcții complexe, nu se știe dacă are sens să depanem acest lucru
funcția specifică în pași sau este mai bine să o faceți fără a intra în interiorul pentru depanare detaliată.

Schimbarea codului în zbor

Dacă aveți o mulțime de cod care rulează în instruciunea Execute, este mai bine să puneți acest cod într-o anumită variabilă, astfel încât să puteți schimba acest cod, dacă este necesar. Îți spun un caz din practică.

Am depanat cumva o prelucrare pentru schimbul de date - au existat multe bucăți de cod care rulează prin Run. Asta e problema sa întâmplat - am fost încărcat un fișier mare (multimetru) și așa rănit dacă el încărcat de o oră, iar apoi ia oprit pe unele bug-uri minore în cod, care nu a fost detectată în etapa de depanare, întotdeauna în cele mai neașteptate locuri.

Mayalis ne-am obosit și apoi am venit - toate apelurile pentru Run au fost făcute într-o singură funcție, unde codul de execuție și parametrii au fost transmiși. Acest lucru ne-a servit bine.

Am introdus Execute într-o excepție de excepție și, dacă a apărut o excepție, i-am oferit programatorului să schimbe codul în direct. Dacă a fost de acord, a fost deschis un dialog de introducere a codului, unde putea înlocui codul vechi cu unul nou. Și înainte de a executa codul, am verificat dacă este în lista de substituire. Dacă există, am înlocuit codul vechi cu unul nou înainte de execuție. Deci, am reușit să descărcăm rapid datele.

Depistarea pe server

Pentru a vă salva nervii, vă spun că este imposibil să depanați codul care rulează pe server (în ternar). Prin urmare, dacă aveți un program în versiunea de fișier se oprește la punct de întrerupere, și în server - nu, nu fi speriat, și conceput. La urma urmei, codul rulează pe serverul de aplicații și, prin urmare, nu poate fi depanat pe client.

Condiționat punct de întrerupere

Nu toată lumea știe că în 1C 80 există un punct de întrerupere condițional - punct de întrerupere în funcție de condiție. Cu toate acestea, acesta este un mecanism foarte util.

urmărire

Uneori este nevoie să urmăriți codul programului - adică în ieșirea din caseta de mesaje a valorilor variabilelor pentru fiecare trecere prin punctul de cod.

În aceste scopuri, poate fi folosit un punct de întrerupere condițional în 1C, deoarece condiția este verificată pe fiecare trecere a codului printr-un punct de întrerupere condiționat.


Pe linia specificată, puneți un punct de întrerupere cu condiția:


Acum, când depanem un program în fereastra de mesaj, codul este urmărit:

Suma: 1
Sumă: 3
Suma: 6
Suma: 10
Suma: 15
Sumă: 21
Suma: 28
Suma: 36
Sumă: 45
Sumă: 55

Firește, puteți folosi condițiile și nu puteți afișa toate mesajele, dar numai cu valorile variabilelor de interes pentru noi:


Metoda este convenabilă pentru că nu este nevoie să efectuați modificări ale configurației.
Este convenabil să prindeți erori când 1C "se blochează", dacă scrieți mesaje într-un fișier.

Managementul codului


Să presupunem că avem acest cod:

În acest caz, putem utiliza gestionarea codului de software.
La începutul operatorului Dacă setăm un punct de întrerupere condiționat:

Ie dacă A = 1, atunci atribuim o valoare A a 2 și atribuim 1 în cazul opus.
Acest lucru permite, fără a schimba configurația, să redirecționați în mod constant codul la ramura dorită.
Puteți pune doar un breakpoint condițional care va atribui valoarea dorită A:

Trasabilitate vizibilă

Dacă introduceți o mulțime de funcții în cod pentru a raporta progresul programului, atunci uneori este dificil să găsiți toate aceste apeluri de urmărire.

Propun să facem astfel de apeluri, astfel încât, înainte de a se spune mesajul, a existat un punct și virgulă:


Dacă nu este nevoie temporar de urme, acesta trebuie eliminat după cum urmează:


Apoi, toate urmele active pot fi găsite pe linia "Report" și toate cele inactive pe linia "// Report".

Interfață pentru depanare


Sincer, când m-am saturat de a merge în mod constant după repornire prin documentul 1C Operațiuni în lista documentelor necesare pentru mine, am creat eu interfață „depanator“ din meniul său blocat comenzile mine. Acum, după repornire, m-am găsit în jurnalul / forma corectă cu un singur clic.

O altă opțiune este să vă creați un întreg desktop de depanare - adică deschideți imediat toate formularele și documentele necesare. Pentru a face acest lucru, este mai bine să creați o procesare externă, denumiți-o de exemplu "Opener" și sub forma acestei procesări scrieți ce trebuie să deschideți:

Acum este suficient să deschideți această procesare externă și desktopul va fi ajustat. Data viitoare când această procesare va fi deja în lista fișierelor deschise recent.

O versiune mai simplă pentru cei leneși este să scrieți calculul expresiilor (de exemplu cu ajutorul telecomenzii) în tabloul de bord, care va deschide documentele și jurnalele necesare. Ușor și rapid!

Depanarea bazei de date client-server


Se știe că codul de pe server nu este depanat.
Prin urmare, opțiunile de depanare:
1. Trasarea (introducerea mesajelor de diagnosticare).
2. Încărcați baza de date într-o copie a fișierului și depanați-o acolo.
3. Bifați "Client" pe modulul care vă interesează și depanați-l. Apoi returnați marcajul de verificare înapoi.
Notă: În secțiunea 1C v 8.1, puteți depana codul pe server. Pentru a face acest lucru, serverul trebuie să ruleze în modul de depanare, puteți din linia de comandă: ragent.exe / debug

Utilizarea procesării externe


Adesea, când codul de bază nu poate fi modificat și doriți să jucați sau când codul rulează pe server și nu există nicio modalitate de depanare, folosirea procesării externe ajută.
Pentru a face acest lucru, trebuie să copiați codul în procesarea externă și să actualizați deja procesarea externă, schimbând codul și scanând variabilele în timp ce mergeți.

Condiții de încercare a conductelor


Uneori este dificil să obțineți un exemplu în baza de date, în care se îndeplinește o anumită condiție exotică.
În acest caz, este mai ușor să alunecați datele de testare.
De exemplu, dacă un anumit tabel de valori este procesat în cod, puteți nota tabelul de valori direct în cod și completați-l cu date noi, sub care această condiție exotică este îndeplinită.
Pentru cei care nu le place să strice codul pentru depanare, poate fi recomandabil să se utilizeze un apel de funcție la distanță un proces extern, care va umple un tabel de valori ca și trebuie să (de exemplu, se consideră de la aspectul).

Deblocarea blocajelor


Uneori trebuie să vedem cum se comportă două procese paralele.
Cel mai simplu mod de depanare a acestor situații este introducerea în cod a unei proceduri de avertizare ().
De exemplu, în cazul înregistrării obiectelor, introduceți avertizarea ("Obiectul este scris").
Apoi, dacă deschideți o altă sesiune și încercați să notați obiectul, veți primi un avertisment că obiectul este blocat.

Dacă o astfel de depanare este apelată frecvent, recomand această metodă de a apela simultan două sesiuni de 1C.
Din programul de depanare, apăsați F5 (Start debugging), începe 1C: Enterprise. Deconectați-vă de depanarea acestui 1C Enterprise - "Debug" -> "Disconnect", apoi apăsați încă o dată tasta F5. Ca rezultat, a doua sesiune este conectată la depanator. Rulați codul de avertizare în prima sesiune și depanați-l în cel de-al doilea.

Detectarea mai rapidă


Debuggerul reduce viteza programului.
Prin urmare, puteți face acest lucru - dezactivați depanatorul și, în locul potrivit, afișează Avertisment ();
Când se afișează un avertisment, puteți conecta din nou depanatorul, pune un punct de întrerupere și începe debugging-ul.

V8 trucuri de depanare

Articole similare