Projekat

Općenito

Profil

Akcije

Greške #25801

Zatvoren

dijagnostika F18: serviser - L1: lociranje greške u source code-u, L3: debug programer

Dodano od Ernad Husremović prije više od 13 godina. Izmjenjeno prije skoro 13 godina.

Status:
Zatvoreno
Prioritet:
Normalan
Odgovorna osoba:
Početak:
22.12.2011
Završetak:
% završeno:

0%

Procjena vremena:

Povezani tiketi 2 (0 otvoreno2 zatvorenih)

korelira sa F18 - Greške #25799: OS DTOS error - pregled sredstava po kontimaZatvorenoErnad Husremović22.12.2011

Akcije
korelira sa F18 - Podrška #25788: servisersko okruženje F18ZatvorenoJasmin Beganović21.12.201122.12.2011

Akcije
Akcije #1

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

Akcije #2

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
Akcije #3

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

Akcije #4

Izmjenjeno od Ernad Husremović prije više od 13 godina

mvim/gvim

pozicioniramo se u vrh source koda

hernad@macan:~/github/F18_knowhow$ mvim .
Akcije #5

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

Akcije #6

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.

Akcije #7

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) )
Akcije #8

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).

Akcije #9

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.

Akcije #10

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

Akcije #11

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

Akcije #12

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

Akcije #13

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" 
Akcije #14

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.

Akcije #15

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.

Akcije #16

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
Akcije #17

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.

Akcije #18

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
Akcije #19

Izmjenjeno od Ernad Husremović prije više od 13 godina

:vimgrep /dbcreate2.*valute/ **/*.prg
Akcije #21

Izmjenjeno od Jasmin Beganović prije skoro 13 godina

  • Status promijenjeno iz Dodijeljeno u Zatvoreno
Akcije

Također dostupno kao Atom PDF