AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi BUG? - Boolean Variable wird willkürlich auf true gesetzt

BUG? - Boolean Variable wird willkürlich auf true gesetzt

Ein Thema von HeinzJ · begonnen am 28. Apr 2009 · letzter Beitrag vom 29. Apr 2009
Antwort Antwort
Seite 2 von 2     12
Benutzerbild von thkerkmann
thkerkmann

Registriert seit: 7. Jan 2006
Ort: Pulheim Brauweiler
464 Beiträge
 
Delphi 2010 Professional
 
#11

Re: BUG? - Boolean Variable wird willkürlich auf true gesetz

  Alt 28. Apr 2009, 11:15
Hi,

mit diesem Code kann nix passieren....

Ich behaupte mal folgendes:

Die Variablendeklartion
Delphi-Quellcode:
      
      FRelationList: TStringList;
      HasReadRelationListFromDB: Boolean;
ist nicht original - ich vermute mal VOR HasReadRelationListFromDB wird noch ein statisches array sein, in dessen Speicher du irgendwo mit einem Index größer als die eigentliche Größe hineinschreibst.
Da das ganze nicht den Variablenbereich deines Objektes sprengt, wird kein Fehler angezeigt - es sei denn du schaltest mal RangeChecking ein.

Habe selber nach so einem Fehler schon Tage gesucht. Das macht richtig Spass.
Thomas Kerkmann
Ich hab noch einen Koffer in Borland.
http://thomaskerkmann.wordpress.com/
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#12

Re: BUG? - Boolean Variable wird willkürlich auf true gesetz

  Alt 28. Apr 2009, 11:45
Hi,

Zitat von HeinzJ:
Delphi-Quellcode:
unit Abgespeckt;

interface

...

implementation

...

function AClass.GetRelationList: TStringList;
begin
   if not HasReadRelationListFromDB then
   begin
      ShowMessage('xyz'); // hier Breakpoint setzen!
      HasReadRelationListFromDB := true;
      ...
   end;
   ...
end;

end.
Ich würde mal die Projektoptionen prüfen und alle Optimierungen abschalten bzw. die Debug Optionen einschalten. Setz den Breakpoint wie oben gezeigt und pack ein ShowMessage o.ä. rein.

Es ist stark davon auszugehen, daß ein "if not x then x := true" ziemlich schnell (weg)optimiert wird. Ganz sicher kannst Du gehen, in dem Du Dir die besagte Codestelle im Debugger während der Ausführung als asm anzeigen lässt.

Gruß Assertor
Frederik
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#13

Re: BUG? - Boolean Variable wird willkürlich auf true gesetz

  Alt 28. Apr 2009, 11:52
Zitat von HeinzJ:
Der Constructor wird erreicht
X ist eine Array of const, momemtan nur ein Integer [1]
Die Klasse wird per Obj:= AClass.Create([oid]); kreiert.
Am Ende des Create hat HasReadRelationListFromDB den Wert FALSE.
Das AClass sieht mir ganz danach aus, als wenn hier eine Class Of XXX verwendet wird. Dabei ist zu beachten, dass dann der Constructor von XXX als virtuell deklariert werden muss und alle nachfolgenden Ableitungen diesen überschreiben müssen, wenn sie einen Constructor haben, da diese sonst nicht aufgerufen wird.

Und warum eine boolsche Variable, wo doch assigned(FRelationList) genau dieses boolsche Ergebnis liefert ohne zusätzliche Variable?
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.604 Beiträge
 
#14

Re: BUG? - Boolean Variable wird willkürlich auf true gesetz

  Alt 28. Apr 2009, 11:56
Ich würde mir die Adresse des boolschen Wertes raussuchen und einen Datenhaltepunkt setzen. Dort siehst Du dann, wann der Wert an dieser Speicheradresse geändert wird. Das ist aller Wahrscheinlichkeit nach der effizienteste Weg den Fehler einzukreisen.
Sebastian Gingter
Phoenix - 不死鳥
Mein Blog: http://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.017 Beiträge
 
Delphi 12 Athens
 
#15

Re: BUG? - Boolean Variable wird willkürlich auf true gesetz

  Alt 28. Apr 2009, 12:00
Zitat von Muetze1:
Das AClass sieht mir ganz danach aus, als wenn hier eine Class Of XXX verwendet wird. ...
sieht nur so aus ... siehe Post #4 ... er hat seine Klasse einfach nur AClass getauft

@HeinzJ: sicher daß du nicht irgendwo 'nen Pufferüberlauf oder irgendwas Dergleichen hast?
(welcher praktisch an "falschen" Stellen im RAM rumschreibt)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#16

Re: BUG? - Boolean Variable wird willkürlich auf true gesetz

  Alt 28. Apr 2009, 13:26
Hallo HeinzJ,

der Fehler bei solchen "völlig" unerklärbaren Fehlern, sitzt meistens VOR dem Computer

Jetz änder Deine Klasse mal, und prüfe ob vielleicht eine Nachfolgende Klasse oder irgendjemand anderes die Variable ändert
Denn ich vermute, genau deswegen hast Du die Variablen im protected Teil..



Delphi-Quellcode:
AClass = class(TObject)
strict private // oder nur private

  FHasReadRelationListFromDB : boolean;
  function GetiNumMembers: smallint;

protected
      FRelationList: TStringList;
public
      constructor Create(X: array of const);
      property HasReadRelationListFromDB: Boolean read FHasReadRelationListFromDB;
      property RelationList: TStringList read GetRelationList;
      property NumberOfMembers: smallint read GetiNumMembers;
end;


implementation

function AClass.GetRelationList: TStringList;
begin
   if not FHasReadRelationListFromDB then // jetzt wird es gehen :-)
   begin
      FHasReadRelationListFromDB := true; // << Diese Zeile wird nie erreicht (jetzt schon)
      FRelationList := TStringList.Create;
      // read someting from a db.
   end;
   Result := FRelationList;
end;



im übrigen, wenn Du die Variable nur als "Information" brauchst, ob die List schon da ist, kannst Du auch mit

Delphi-Quellcode:
if not assigned(FRelationList) then begin
    FRelationList := TStringList.Create;
end;
Result := FRelationList;
die Variable sparen
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat
HeinzJ

Registriert seit: 17. Aug 2007
Ort: Bremen
84 Beiträge
 
Delphi 2007 Architect
 
#17

Re: BUG? - Boolean Variable wird willkürlich auf true gesetz

  Alt 29. Apr 2009, 08:39
Danke für alle Antworten
Abhilfe hat bei mir nur die Löschung aller DCUs sowie das Laden des Projektes über die DPR geschafft.
Keine Ahnung wieso.

HeinzJ
  Mit Zitat antworten Zitat
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
648 Beiträge
 
Delphi 12 Athens
 
#18

Re: BUG? - Boolean Variable wird willkürlich auf true gesetz

  Alt 29. Apr 2009, 11:28
Zitat von hoika:
2. geht nur zur Laufzeit.
Setze einen Breakpoint auf deinen Konstruktor.
Wird er angesprungen, Popup-Menü "Bei Änderung anhalten" für die Variable setzen.
Das muss übrigens bei jedem Programm-Start neugemacht werden,
weil die Adresse der Variable überwacht wird und die sich bei jedem Start ändert.
Das eigentliche Problem scheint ja gelöst zu sein, aber zu diesem Daten-Haltepunkt habe ich mal eine Nachfrage: Kann es sein, dass es diese Funktion im Popup-Menü bei D2009 nicht mehr gibt? Wenn ich bei einem Programm von mir das oben beschriebene durchführen will, dann finde ich in einem Popup-Menü zwar eine unglaubliche Menge an Einträgen, aber nicht diesen.

Ich kann dann manuell in den Haltepunkten einen Daten-Haltepunkt setzen und statt einer Adresse dann den Variablennamen eingeben, dann klappt es. Geht natürlich, aber ist schon ein bisschen umständlicher (zumal mir bisher nie klar war, dass man das nur zur Laufzeit kann, hätte ja sein können, dass Delphi die Adresse bei jedem Start selbst neu ermittelt, falls möglich...), und daher die Frage, ob ich zu blöd bin, den Eintrag im Popup-Menü zu finden oder ob man wirklich diesen kleinen Umweg gehen muss?

Bis denn
Bommel
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz