|
| Compilerfejl? Fra : Kurt Guldbæk |
Dato : 28-06-04 16:11 |
|
Hej NG.
Delphi 5.
Jeg har fået et mærkeligt problem: Tilsyneladende oversætter compileren ikke
all linier
Når jeg tracer gennem programmet springes der over nogle linier, som blot er
almindelige tilskrivninger.
Desuden er der ikke 'boller' i venstre margen, hvilket er med til at få mig
til at tro, at compileren springer linierne over.
Del af programmet: (Bollen til venstre er den, som er i margenen. Disse
linier bliver sprunget over ved kørselen.)
procedure TLoggerForm.btnAabnClick(Sender: TObject);
Var
TempStreng : String;
I, TabPos, DotPos, TmpInt, AntalData : Integer;
T1, T2 : Integer;
x_step, y_step, R1, R2,Y_Max, Y_Min : Real;
TempTabel : Array of Integer; //Tabel med temperatur *10
FugtTabel : Array of Integer; //Tabel med fugt *10
a.. begin
// hent fil og gem data i tabeller
klip
a.. X_Step := (Image1.Width-20)/AntalData;
b.. If MinT < MinF Then Y_Min := MinT
Else Y_Min := MinF;
a.. If MaxT > MaxF Then Y_Max := MaxT
Else Y_Max := MaxF;
R1:= Y_Max-Y_Min;
R2:= (Image1.Height)-20;
a.. R1:= 1.23;
R2:= 2.34;
Y_Step := R2/R1;
a.. Edit1.Text := FormatFloat('##.#',R1);
b.. Image1.Canvas.Pen.Color := clRed;
c.. Image1.Canvas.MoveTo(20,Round(TempTabel[1]));
d.. For I := 1 to AntalData do
Begin
a.. With Image1 do begin
b.. Canvas.LineTo(Round(I*1)+20,Round(TempTabel[I-1]/1));
End;
a.. End;
b.. end;
Hvis jeg i linien med
R1 := 1.24;
erstatter R1 med R2 bliver linien ikke udført!
Jeg har prøvet at ændre opsætningerne for compileren, men det hjælper ikke!
Er der nogen, der kan se hvor jeg dummer mig?
--
Med venlig hilsen
Kurt Guldbæk
| |
Kurt Guldbæk (28-06-2004)
| Kommentar Fra : Kurt Guldbæk |
Dato : 28-06-04 16:13 |
|
Jeg kan se, at bollerne er blevet erstattet med a. osv.
/Kurt
"Kurt Guldbæk" <k@g.s> skrev i en meddelelse
news:40e034fb$0$23869$14726298@news.sunsite.dk...
> Hej NG.
>
> Delphi 5.
> Jeg har fået et mærkeligt problem: Tilsyneladende oversætter compileren
ikke
> all linier
> Når jeg tracer gennem programmet springes der over nogle linier, som blot
er
> almindelige tilskrivninger.
> Desuden er der ikke 'boller' i venstre margen, hvilket er med til at få
mig
> til at tro, at compileren springer linierne over.
>
> Del af programmet: (Bollen til venstre er den, som er i margenen. Disse
> linier bliver sprunget over ved kørselen.)
> procedure TLoggerForm.btnAabnClick(Sender: TObject);
>
> Var
>
> TempStreng : String;
>
> I, TabPos, DotPos, TmpInt, AntalData : Integer;
>
> T1, T2 : Integer;
>
> x_step, y_step, R1, R2,Y_Max, Y_Min : Real;
>
> TempTabel : Array of Integer; //Tabel med temperatur *10
>
> FugtTabel : Array of Integer; //Tabel med fugt *10
>
>
>
> a.. begin
> // hent fil og gem data i tabeller
>
> klip
>
>
>
> a.. X_Step := (Image1.Width-20)/AntalData;
> b.. If MinT < MinF Then Y_Min := MinT
> Else Y_Min := MinF;
> a.. If MaxT > MaxF Then Y_Max := MaxT
> Else Y_Max := MaxF;
>
> R1:= Y_Max-Y_Min;
>
> R2:= (Image1.Height)-20;
>
> a.. R1:= 1.23;
> R2:= 2.34;
>
> Y_Step := R2/R1;
>
> a.. Edit1.Text := FormatFloat('##.#',R1);
> b.. Image1.Canvas.Pen.Color := clRed;
> c.. Image1.Canvas.MoveTo(20,Round(TempTabel[1]));
> d.. For I := 1 to AntalData do
> Begin
>
> a.. With Image1 do begin
> b.. Canvas.LineTo(Round(I*1)+20,Round(TempTabel[I-1]/1));
> End;
>
> a.. End;
> b.. end;
> Hvis jeg i linien med
> R1 := 1.24;
> erstatter R1 med R2 bliver linien ikke udført!
>
> Jeg har prøvet at ændre opsætningerne for compileren, men det hjælper
ikke!
> Er der nogen, der kan se hvor jeg dummer mig?
>
> --
>
> Med venlig hilsen
> Kurt Guldbæk
>
>
| |
Lars G (28-06-2004)
| Kommentar Fra : Lars G |
Dato : 28-06-04 17:40 |
|
Hej
"Kurt Guldbæk" <k@g.s> skrev i en meddelelse
news:40e034fb$0$23869$14726298@news.sunsite.dk...
> Delphi 5.
> Jeg har fået et mærkeligt problem: Tilsyneladende oversætter compileren
ikke
> all linier
Det er ikke en "FEJL"
Kompileren i Delphi er ret smart og fjerner code som aldrig bliver brugt !
Hvis du ikke vil have den til det skal du i Project>options>Compiler> og
fjern optimization !
> Når jeg tracer gennem programmet springes der over nogle linier, som blot
er
> almindelige tilskrivninger.
Ja koden er der jo ikke !
> Desuden er der ikke 'boller' i venstre margen, hvilket er med til at få
mig
> til at tro, at compileren springer linierne over.
Igen for af vise der ingen kode er.
Mvh
Lars G
| |
Kurt Guldbæk (29-06-2004)
| Kommentar Fra : Kurt Guldbæk |
Dato : 29-06-04 06:40 |
|
"Lars G" <lbg_@_adslhome.dk> wrote in message
news:40e049bd$0$160$edfadb0f@dtext02.news.tele.dk...
> Hej
>
> "Kurt Guldbæk" <k@g.s> skrev i en meddelelse
> news:40e034fb$0$23869$14726298@news.sunsite.dk...
> > Delphi 5.
> > Jeg har fået et mærkeligt problem: Tilsyneladende oversætter compileren
> ikke
> > all linier
>
> Det er ikke en "FEJL"
>
> Kompileren i Delphi er ret smart og fjerner code som aldrig bliver brugt !
>
> Hvis du ikke vil have den til det skal du i Project>options>Compiler> og
> fjern optimization !
>
> > Når jeg tracer gennem programmet springes der over nogle linier, som
blot
> er
> > almindelige tilskrivninger.
>
> Ja koden er der jo ikke !
>
> > Desuden er der ikke 'boller' i venstre margen, hvilket er med til at få
> mig
> > til at tro, at compileren springer linierne over.
>
> Igen for af vise der ingen kode er.
>
> Mvh
> Lars G
>
Den havde jeg ikke fanget, men det var årsagen.
Tak for hjælpen.
/Kurt
| |
David Konrad (29-06-2004)
| Kommentar Fra : David Konrad |
Dato : 29-06-04 10:39 |
|
"Lars G" <lbg_@_adslhome.dk> wrote in message
news:40e049bd$0$160$edfadb0f@dtext02.news.tele.dk...
> Det er ikke en "FEJL"
>
> Kompileren i Delphi er ret smart og fjerner code som aldrig bliver brugt !
>
> Hvis du ikke vil have den til det skal du i Project>options>Compiler> og
> fjern optimization !
I en debug-fase vil jeg fraråde det, da det vanskeliggør brug af watches mv.
Men, når det er Delphi 5 *kan* det faktisk godt være en programfejl. 5'eren
har nemlig en evne til at opføre sig nøjagtigt som beskrevet, og man er
ganske enkelt nødt til at lukke miljøet, starte det forfra og lave en build
for at få hele koden med i kompileringen - det sker faktisk. En tredje
mulighed er complete boolean-evaluation, hvilket Kurts kode også kan
indikere - hvis MinT *altid* er større end MinF vil de logiske operator
sætninger ganske enkelt aldrig blive kaldt - men det hænger så også sammen
med optimization. Min holdning er, at optimization kun bør være slået til
når man kompilerer en færdig version eller en milepæls-version - ikke medens
man udvikler, eller debugger - det er der absolut ingen grund til.
| |
Kurt Guldbæk (29-06-2004)
| Kommentar Fra : Kurt Guldbæk |
Dato : 29-06-04 16:30 |
|
"David Konrad" <david_konrad_FJERN_@hotmail.com> skrev i en meddelelse
news:40e1389f$0$23881$14726298@news.sunsite.dk...
> "Lars G" <lbg_@_adslhome.dk> wrote in message
> news:40e049bd$0$160$edfadb0f@dtext02.news.tele.dk...
>
> > Det er ikke en "FEJL"
> >
> > Kompileren i Delphi er ret smart og fjerner code som aldrig bliver brugt
!
> >
> > Hvis du ikke vil have den til det skal du i Project>options>Compiler> og
> > fjern optimization !
>
> I en debug-fase vil jeg fraråde det, da det vanskeliggør brug af watches
mv.
> Men, når det er Delphi 5 *kan* det faktisk godt være en programfejl.
5'eren
> har nemlig en evne til at opføre sig nøjagtigt som beskrevet, og man er
> ganske enkelt nødt til at lukke miljøet, starte det forfra og lave en
build
> for at få hele koden med i kompileringen - det sker faktisk. En tredje
> mulighed er complete boolean-evaluation, hvilket Kurts kode også kan
> indikere - hvis MinT *altid* er større end MinF vil de logiske operator
> sætninger ganske enkelt aldrig blive kaldt - men det hænger så også sammen
> med optimization. Min holdning er, at optimization kun bør være slået til
> når man kompilerer en færdig version eller en milepæls-version - ikke
medens
> man udvikler, eller debugger - det er der absolut ingen grund til.
Jeg har faktisk også afbrudt optimeringen og vil først slå den til igen til
slut.
Det er rart at kunne lave 'mellemregninger' undervejs.
/Kurt
| |
|
|