/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
Fejl i Delphi 6?
Fra : Asger Grunnet


Dato : 26-11-01 23:22

Hej med jer!

Jeg har for nyligt opgraderet fra Delphi 5 til Delphi 6 og er
stødt på en mærkværdighed.

Den følgende kode virker som forventet (det forudsættes at der
findes en fil der hedder e:\Test.txt og som har længde mindst 10) :


procedure TForm1.Button1Click(Sender: TObject);
var
wStream : TFileStream;
wPos : Integer;
wSize : Integer;
begin
wStream := TFileStream.Create('e:\Test.txt', fmOpenRead or fmShareDenyNone);
try
wStream.Seek(10, soFromBeginning);
wPos := wStream.Position;
wSize := wStream.Size;
ShowMessage(IntToStr(wPos) + ' ' + IntToStr(wSize));
finally
wStream.Free;
end;
end;


Men hvis jeg placerer et breakpoint på linien med ShowMessage, og
tilføjer wStream.Position og wStream.Size til Watch-listen, så
påstår Delphi 6 at værdierne er 0! Der er ikke noget problem i Delphi 5.

Er det bare min Delphi installation der er mærkelig, eller hvad?

/Asger



 
 
Thomas Rose (27-11-2001)
Kommentar
Fra : Thomas Rose


Dato : 27-11-01 08:16

Hej Asger,

jeg ved ikke om det er en fejl i Delphi 6 (jeg bruger selv D5), men jeg ved
at der findes en bug i D5 der minder om det - hvor debuggeren/"Code Insight"
kan finde på at skrive at en objektreference er "nil" selvom det i
virkeligheden er en peger til et validt objekt. Har du prøvet at skrive
værdierne ud på skærmen, for at verificere de tal som Delphi 6 selv oplyser?

Cheers,
Thomas

"Asger Grunnet" <asger@adslhome.dk> wrote in message
news:3c02c10c$0$223$edfadb0f@dspool01.news.tele.dk...
> Hej med jer!
>
> Jeg har for nyligt opgraderet fra Delphi 5 til Delphi 6 og er
> stødt på en mærkværdighed.
>
> Den følgende kode virker som forventet (det forudsættes at der
> findes en fil der hedder e:\Test.txt og som har længde mindst 10) :
>
>
> procedure TForm1.Button1Click(Sender: TObject);
> var
> wStream : TFileStream;
> wPos : Integer;
> wSize : Integer;
> begin
> wStream := TFileStream.Create('e:\Test.txt', fmOpenRead or
fmShareDenyNone);
> try
> wStream.Seek(10, soFromBeginning);
> wPos := wStream.Position;
> wSize := wStream.Size;
> ShowMessage(IntToStr(wPos) + ' ' + IntToStr(wSize));
> finally
> wStream.Free;
> end;
> end;
>
>
> Men hvis jeg placerer et breakpoint på linien med ShowMessage, og
> tilføjer wStream.Position og wStream.Size til Watch-listen, så
> påstår Delphi 6 at værdierne er 0! Der er ikke noget problem i Delphi 5.
>
> Er det bare min Delphi installation der er mærkelig, eller hvad?
>
> /Asger
>
>



Asger Grunnet (27-11-2001)
Kommentar
Fra : Asger Grunnet


Dato : 27-11-01 18:59


"Thomas Rose" <trose@get2net.dk> wrote in message news:3c033d7f$0$738$edfadb0f@dspool01.news.tele.dk...
> Hej Asger,
>
> jeg ved ikke om det er en fejl i Delphi 6 (jeg bruger selv D5), men jeg ved
> at der findes en bug i D5 der minder om det - hvor debuggeren/"Code Insight"
> kan finde på at skrive at en objektreference er "nil" selvom det i
> virkeligheden er en peger til et validt objekt.

Det har jeg til gengæld ikke været ude for!

> Har du prøvet at skrive
> værdierne ud på skærmen, for at verificere de tal som Delphi 6 selv oplyser?

Ja, kaldet til ShowMessage i min kode-stump (indkluderet nedenunder) skriver de
korrekte værdier ud, og programmet virker som sagt også upåklageligt. Det er kun
i debuggeren der er et problem. Det er selvfølgelig ikke noget stort problem.
Det kan bare være lidt irriterende, at jeg indimellem ikke kan se de rigtige værdier
når jeg debugger.

/Asger

> "Asger Grunnet" <asger@adslhome.dk> wrote in message
> news:3c02c10c$0$223$edfadb0f@dspool01.news.tele.dk...
> > Hej med jer!
> >
> > Jeg har for nyligt opgraderet fra Delphi 5 til Delphi 6 og er
> > stødt på en mærkværdighed.
> >
> > Den følgende kode virker som forventet (det forudsættes at der
> > findes en fil der hedder e:\Test.txt og som har længde mindst 10) :
> >
> >
> > procedure TForm1.Button1Click(Sender: TObject);
> > var
> > wStream : TFileStream;
> > wPos : Integer;
> > wSize : Integer;
> > begin
> > wStream := TFileStream.Create('e:\Test.txt', fmOpenRead or fmShareDenyNone);
> > try
> > wStream.Seek(10, soFromBeginning);
> > wPos := wStream.Position;
> > wSize := wStream.Size;
> > ShowMessage(IntToStr(wPos) + ' ' + IntToStr(wSize));
> > finally
> > wStream.Free;
> > end;
> > end;
> >
> >
> > Men hvis jeg placerer et breakpoint på linien med ShowMessage, og
> > tilføjer wStream.Position og wStream.Size til Watch-listen, så
> > påstår Delphi 6 at værdierne er 0! Der er ikke noget problem i Delphi 5.
> >
> > Er det bare min Delphi installation der er mærkelig, eller hvad?
> >
> > /Asger




Peter Petersen (27-11-2001)
Kommentar
Fra : Peter Petersen


Dato : 27-11-01 20:07

Jeg har oplever det samme når jeg debugger.
Jeg tror der er tale om en compiler optimering.

Dette begrunder jeg i, at årsagen til det du oplever er, at du sætter dit
breakpoint efter at du er færdig med at anvende objektet, og det faktisk
ikke har nogen yderligere anvendelse i programmet. Havde du istedet sat dit
break på
wPos := wStream.Position;
ville du have set, at objekterne stadig indeholdt de rigtige værdier.....


M.v.h.
Peter

"Asger Grunnet" <asger@adslhome.dk> wrote in message
news:3c03d4fa$0$731$edfadb0f@dspool01.news.tele.dk...
>
> "Thomas Rose" <trose@get2net.dk> wrote in message
news:3c033d7f$0$738$edfadb0f@dspool01.news.tele.dk...
> > Hej Asger,
> >
> > jeg ved ikke om det er en fejl i Delphi 6 (jeg bruger selv D5), men jeg
ved
> > at der findes en bug i D5 der minder om det - hvor debuggeren/"Code
Insight"
> > kan finde på at skrive at en objektreference er "nil" selvom det i
> > virkeligheden er en peger til et validt objekt.
>
> Det har jeg til gengæld ikke været ude for!
>
> > Har du prøvet at skrive
> > værdierne ud på skærmen, for at verificere de tal som Delphi 6 selv
oplyser?
>
> Ja, kaldet til ShowMessage i min kode-stump (indkluderet nedenunder)
skriver de
> korrekte værdier ud, og programmet virker som sagt også upåklageligt. Det
er kun
> i debuggeren der er et problem. Det er selvfølgelig ikke noget stort
problem.
> Det kan bare være lidt irriterende, at jeg indimellem ikke kan se de
rigtige værdier
> når jeg debugger.
>
> /Asger
>
> > "Asger Grunnet" <asger@adslhome.dk> wrote in message
> > news:3c02c10c$0$223$edfadb0f@dspool01.news.tele.dk...
> > > Hej med jer!
> > >
> > > Jeg har for nyligt opgraderet fra Delphi 5 til Delphi 6 og er
> > > stødt på en mærkværdighed.
> > >
> > > Den følgende kode virker som forventet (det forudsættes at der
> > > findes en fil der hedder e:\Test.txt og som har længde mindst 10) :
> > >
> > >
> > > procedure TForm1.Button1Click(Sender: TObject);
> > > var
> > > wStream : TFileStream;
> > > wPos : Integer;
> > > wSize : Integer;
> > > begin
> > > wStream := TFileStream.Create('e:\Test.txt', fmOpenRead or
fmShareDenyNone);
> > > try
> > > wStream.Seek(10, soFromBeginning);
> > > wPos := wStream.Position;
> > > wSize := wStream.Size;
> > > ShowMessage(IntToStr(wPos) + ' ' + IntToStr(wSize));
> > > finally
> > > wStream.Free;
> > > end;
> > > end;
> > >
> > >
> > > Men hvis jeg placerer et breakpoint på linien med ShowMessage, og
> > > tilføjer wStream.Position og wStream.Size til Watch-listen, så
> > > påstår Delphi 6 at værdierne er 0! Der er ikke noget problem i Delphi
5.
> > >
> > > Er det bare min Delphi installation der er mærkelig, eller hvad?
> > >
> > > /Asger
>
>
>



Asger Grunnet (28-11-2001)
Kommentar
Fra : Asger Grunnet


Dato : 28-11-01 08:20


"Peter Petersen" <the.1@get2net.dk> wrote in message news:3c03e390$0$58048$edfadb0f@dspool01.news.tele.dk...
> Jeg har oplever det samme når jeg debugger.
> Jeg tror der er tale om en compiler optimering.
>
> Dette begrunder jeg i, at årsagen til det du oplever er, at du sætter dit
> breakpoint efter at du er færdig med at anvende objektet, og det faktisk
> ikke har nogen yderligere anvendelse i programmet. Havde du istedet sat dit
> break på
> wPos := wStream.Position;
> ville du have set, at objekterne stadig indeholdt de rigtige værdier.....

Nej, det har ingen betydning.

Du har ret i at man nogle gange ikke kan få fat i værdier på grund af
optimering, men så får man en meddelelse i stil med 'Value inaccessible
due to optimization'. Desuden kan man slå optimering fra under Options,
og det giver heller ingen forskel.

Jeg er overbevist om at det enten er en generel fejl i Delphi 6 eller en fejl
i min Delphi / Windows installation. Jeg har været nødt til at geninstallere
Windows og Delphi (af andre årsager) siden jeg opdagede fejlen, men det
ændrede ikke noget.

/Asger



Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408938
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste