Greške #25801
Zatvorendijagnostika F18: serviser - L1: lociranje greške u source code-u, L3: debug programer
0%
Povezani tiketi 2 (0 otvoreno — 2 zatvorenih)
Izmjenjeno od Ernad Husremović prije više od 13 godina
dio serviserskih procedura trebaju biti i lociranje grešaka u source code-u.
U FMK smo imali praksu da i najbanalniju grešku u source kodu radi developer. To je skupo i nepotrebno.
U F18 uvodimo praksu da obučavamo servisera L1 za dijagnosticiranje, a servisere >= L2 i za otklanjanje trivjalnih bug-ova.
---
(*) L1 - level 1, L2, L3
Izmjenjeno od Ernad Husremović prije više od 13 godina
CALL STACK: --- -------------------------------------------------------------------------------- 1 (b)F18_INIT_APP / 76 <<<< nebitno 2 DTOS / 0 <<<<<<<< 0 - znači da se radi o ugrađenoj harbour funkciji 3 OMJERVAL / 200 <<<<<<<< ovo je linija koda koja nas interesuje 4 (b)OS_RPT_DEFAULT_VALUTE / 21 5 HBGETLIST:GETPREVALIDATE / 0 6 HBGETLIST:READER / 0 7 HBGETLIST:READMODAL / 0 8 READMODAL / 0 9 OS_RPT_DEFAULT_VALUTE / 22 10 OS_PREGLED_PO_KONTIMA / 124 11 (b)OS_IZVJESTAJI / 27 12 MENU_SC / 985 13 OS_IZVJESTAJI / 46 14 (b)TOSMOD_MMENUSTANDARD / 131 15 MENU_SC / 985 16 TOSMOD:MMENUSTANDARD / 148 17 TOSMOD:MMENU / 70 18 TOSMOD:RUN / 149 19 MAINOS / 31 20 MAIN / 60
Izmjenjeno od Ernad Husremović prije više od 13 godina
greška se, gornja analiza pokazuje, desila u funkciji "OmjerVal" linija 200.
Harbour nije case sensitive tako da imena uvijek prikazuje velikim slovima
Izmjenjeno od Ernad Husremović prije više od 13 godina
Izmjenjeno od Ernad Husremović prije više od 13 godina
vim komanda
:vimgrep /on.*OMJERVAL/ **/*.prg
vim nas pozicionira na liniju 198 gdje sen nalazi funkcija
function OmjerVal(ckU, ckIz, dD)
:file
kaže da se funkcija nalazi u common/codes_valute.prg
Izmjenjeno od Ernad Husremović prije više od 13 godina
browseru nalazimo github url koji nas interesuje
https://github.com/knowhow/F18_knowhow/blob/master/common/codes_valute.prg#L200
treba primjetiti na kraju url-a liniju "L200" koja kaže - linija 200 sourc fajla code_valute.prg
i to je to. sada smo se pozicionirali na problem.
Izmjenjeno od Ernad Husremović prije više od 13 godina
gornji url serviser L1 navodi i tu se njegov posao završava.
Serviser L2, L2 ide dalje:
// -------------------------------------- // omjer valuta // -------------------------------------- function OmjerVal(ckU, ckIz, dD) local nU:=0 local nIz:=0 local nArr:=SELECT() SELECT (F_VALUTE) IF !USED() O_VALUTE ENDIF PRIVATE cFiltV := "( naz2=="+cm2str( PADR(ckU,4) )+" .or. naz2=="+cm2str(PADR(ckIz,4))+" ) .and. DTOS(datum)<="+cm2str(DTOS(dD)) SET FILTER TO &cFiltV SET ORDER TO TAG "ID2" GO TOP DO WHILE !EOF() IF naz2==PADR(ckU,4) nU := IF(kurslis=="1", kurs1, IF(kurslis=="2", kurs2, kurs3)) ELSEIF naz2==PADR(ckIz,4) nIz := IF(kurslis=="1",kurs1, IF(kurslis=="2", kurs2, kurs3)) ENDIF SKIP 1 ENDDO SET FILTER TO SELECT (nArr) IF nIz==0 MsgBeep("Greska! Za valutu "+ ckIz + " na dan "+DTOC(dD)+" nemoguce utvrditi kurs!") ENDIF IF nU==0 MsgBeep("Greska! Za valutu "+ckU+" na dan "+DTOC(dD)+" nemoguce utvrditi kurs!") ENDIF RETURN IF( nIz==0 .or. nU==0 , 0 , (nU/nIz) )
Izmjenjeno od Ernad Husremović prije više od 13 godina
šta je datum¶
u spornoj liniji nalazi se
DTOS(datum)
datum je ili ime varijable ili ime dbf polja (polje tabele koja je trenutno otvorena).
Izmjenjeno od Ernad Husremović prije više od 13 godina
vratimo se na automatski bug report
na dnu piše:
Trenutno radno podrucje: VALUTE , na zapisu broj: 3
radi se o tabeli VALUTE.
Izmjenjeno od Ernad Husremović prije više od 13 godina
struktura tabele "valute"¶
interesuje nas struktura tabele valute provjeravamo.
Možemo je provjeriti na više načina
:vimgrep /dbcreate2.*valute/ **/*.prg
pgAdmin dio serviserskog toolset-a¶
ili gledanjem u pgAdmin tabele valute testne baze. (Time dolazimo do pgAdmina kao serviserskog alata)
psql¶
isto možemo i sa konzolne linije. Ova procedura je posebno bitna na terenu tako da je psql neizostavni dio serviserskog toolset-a.
(pronaći ticket u kome objašnjavam kako se kačimo na postgresql i pregledamo pojedine objekte na PG serveru)
I ovo treba biti dio toolseta i podešenja servisnog okruženja
Izmjenjeno od Ernad Husremović prije više od 13 godina
vim je zakon¶
u opciji 1 našli smo dio kojim se kreira dbf tabela "valute"
common/db_create_2.prg linija 138.prg
ovdje vidimo polje "datum" koje je tipa "D" (jezikom dbf tabela, odnosno DATE jezikom sql tabela)
https://github.com/knowhow/F18_knowhow/blob/master/common/db_create_2.prg#L145
Izmjenjeno od Ernad Husremović prije više od 13 godina
dobar bug report može predhodni korak skroz eliminisati !¶
Kao dobar programer uočavam, sve ovo ja mogu staviti u bug report, pa tako čitavu gornju operaciju servisera izbaciti.
Naime, možda je na računaru korisnika neki problem sa tabelom valute. Možda je struktura oštećena tako da mi source kod neće pomoći.
Zato otvaram developerski zahtjev: http://redmine.bring.out.ba/issues/25750#note-3
Izmjenjeno od Ernad Husremović prije više od 13 godina
valute, dtos(datum) problem¶
vratimo se analizi problema. Bug report v2 bi nam vjerovatno dao rješenje ovog bug-a.
On bi nam naime dao informaciju o sadržaju DATUM polja. Ostaje da skontamo značenje funkcije DTOS.
google search "dbase DTOS", ili "xbase DTOS", ili "harbour DTOS", ili "clipper DTOS"¶
prvi pokušaj doveo me je do:
http://www.data-tech.com/help/faxsdk3/dBASE_Expression_Functions.html
DTOS( DATE_VALUE ) The date to string function converts a date value into a character value. The format of the resulting character value is "CCYYMMDD". e.g. ." DTOS( DATE() ) " Returns the character value "19870530" if the date is May 30, 1987.
stvar je jasna ko dan. datumska varijabla se pretvara u string.
konkretno, to bi bilo:
DTOS( DATE() ) => "20111222"
Izmjenjeno od Ernad Husremović prije više od 13 godina
Serviser L3 je de-facto de-bug programer¶
Serviser L3
forkira https://github.com/knowhow/harbour_playground
provjerava ima li neki "DTOS" promjer.
Ako nema, u hello/hello.prg ili na pogodno mjesto dodaje novi test DTOS funkcije i upoznaje se sa njom.
Izmjenjeno od Ernad Husremović prije više od 13 godina
serviser/F18_knowhow¶
ako skonta u čemu je problem, forkira knowhow/F18_knowhow repos (ili ako već ima fork, radi git pull pa onda promjene u svom reposu)
i pravi git pull request developeru.
Developer radi review ispravljenog koda i priprema novi release. Ovim se posao ispravke svodi na 5 minuta developera i veliki učinak servisera.
Izmjenjeno od Ernad Husremović prije više od 13 godina
- Naslov promijenjeno iz dijagnostika F18: serviser - lociranje greške u source code-u u dijagnostika F18: serviser - L1: lociranje greške u source code-u, L3: debug programer
Izmjenjeno od Ernad Husremović prije više od 13 godina
Zaključak¶
Očigledno da se ovim pomjera granica djelovanja servisera.
Već L1 serviser će ovom procedur značajno pomoći developeru da ne troši operacije na lociranje problema u source kodu.
L3 serviser je sposoban da radi veliki broj debug operacija i obavlja funkcije debug programera.
Izmjenjeno od Jasmin Beganović prije više od 13 godina
Ernad Husremović je napisao/la:
:vimgrep /dbcreate2.*valute/
ovo ne fercera
E683: File name missing or invalid pattern
Izmjenjeno od Ernad Husremović prije više od 13 godina
:vimgrep /dbcreate2.*valute/ **/*.prg
Izmjenjeno od Jasmin Beganović prije skoro 13 godina
- Status promijenjeno iz Dodijeljeno u Zatvoreno