Śledzenie debugowania

Ta karta pozwala sprawdzić stan zmiennych w chwili wykonywania kodu. Bywa to bardzo przydatne przy naprawianiu skryptu, który przestał działać, lub po prostu na etapie debugowania.

Punkt debugowania uruchomiony z Konsoli i widok Śledzenie debugowania

Aby skorzystać z funkcji debugowania, trzeba umieścić w kodzie instrukcję debugującą o następującej składni: debug(parametr : text); Gdy kod zostanie wykonany i dojdzie do instrukcji debug, w karcie Śledzenie debugowania pojawi się wpis, którego tytułem jest zawartość parametru, a pod nim struktura wszystkich zmiennych dostępnych w tym momencie wraz z ich bieżącymi wartościami.

Panel Ninext musi być otwarty: gdy panel jest zamknięty, osiągnięte punkty debugowania nie są rejestrowane. Karta Śledzenie debugowania nie musi natomiast być na pierwszym planie.

Aby wypróbować przykłady z tej strony, wklej je do Konsoli i uruchom: widok Śledzenie debugowania od razu wyświetli ich punkty debugowania. Kosz w prawym górnym rogu tego widoku czyści listę.

Uwaga: do ciągu tekstowego można dopisać dowolną szczególnie interesującą zmienną, aby natychmiast zobaczyć jej wartość w karcie Śledzenie debugowania — trzeba jednak zadbać, aby typ był tekstowy! (np. debug("Debug point 1 : " + Variable1); )

Przyglądając się uważnie karcie, widać, że przy każdym wykonaniu instrukcji debug tworzony jest nowy wiersz.

Wiersz ten zawiera nazwę punktu debugowania, czyli tekst przekazany jako parametr do funkcji debug, na przykład: debug("my debug point").

Na początku wiersza wyświetlany jest także czas, jaki upłynął od poprzedniego wiersza debugowania. Pomaga to ocenić wydajność kodu (patrz niżej). Pierwszy wiersz ma zawsze wartość „start”.

Sam wiersz debugowania zawiera po jednym wierszu dla każdej zmiennej widocznej w tym miejscu skryptu: zmiennych zadeklarowanych przed instrukcją debug, zmiennej pętli, a nawet zmiennej, której deklaracja jest w toku i która ma wtedy wartość „void”. Każdy wiersz zmiennej zawiera nazwę, typ, wartość oraz fragment kodu, w którym zmienna jest deklarowana.

Budowa wiersza w widoku Śledzenie debugowania

Rozwijanie, kopiowanie, otwieranie

Wartości wyświetlają się tak jak w Konsoli:

  • listę, rekord, obiekt, odwołanie lub tekst zawierający JSON rozwija się kliknięciem jego strzałki;
  • po najechaniu na wiersz pojawia się przycisk, który kopiuje jego wartość; w wierszu punktu debugowania kopiuje on cały ślad;
  • podkreślona wartość wskazuje rekord: kliknięcie otwiera go w Ninox.

Użycie w pętlach

Umieszczenie instrukcji debug wewnątrz pętli pozwala zobaczyć stan zmiennych przy każdej iteracji. Widać także czas poświęcony na każdą iterację. W poniższym przykładzie opóźnienie najczęściej nie przekracza 1 ms.

Ninox
let a := select Customer
let d := for i in a do
           debug("for each customer");
           i.'first name' + " " + i.'last name';
         end;
debug("all customers");
d;

Punkt debugowania w pętli

Jeśli jednak dodamy instrukcję kosztowną pod względem czasu wykonania, taką jak instrukcja „select”, widać, że czas między kolejnymi iteracjami znacząco rośnie.

Ninox
let a := select Customer
let d := for i in a do
           let e := select Invoice where Customer = i;
           debug("for each customer");
           i.'first name' + " " + i.'last name' + " " + sum(e.TOTAL);
         end;
debug("all customers");
d;

Koszt instrukcji select w pętli

Umieszczając instrukcję debug przed blokiem skryptu i po nim, można zmierzyć całkowity czas wykonania skryptu:

Ninox
debug("start of script");
let a := select Customer
let d := for i in a do
           i.'first name' + " " + i.'last name';
         end;
debug("end of script");
d;

Pomiar całkowitego czasu wykonania skryptu