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
Thema durchsuchen
Ansicht
Themen-Optionen

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 1 von 2  1 2      
HeinzJ

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

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

  Alt 28. Apr 2009, 09:43
Ausgangslage ist eine Klasse mit einem Boolean Wert XYZ.
Im Create wird diese noch einmal explizit auf FALSE gesetzt.

Beim Debuggen wird der Breakpoint, wo XYZ auf true gesetzt wird, NICHT erreicht.
Trotzdem hat die Variable an anderen Stellen im Code nervigerweise den Wert TRUE ?!!

Kennt jemand dieses Verhalten und kann mehr darüber sagen?

Thx, HeinzJ
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#2

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

  Alt 28. Apr 2009, 09:45
*räusper* Glaskugel ist im Urlaub.... *räusper*

Will sagen, ein wenig Code wäre nicht schlecht, da zumindest die Variablen meiner Klassen sich so verhalten, wie ich es gerne hätte...
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#3

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

  Alt 28. Apr 2009, 10:00
Hallo,

mach aus der Variablen ein property,
und setze einen Breakpoint auf die Set-Methode.

Mögliche Ursachen wären:
1. der vorm Monitor
2. Speicherüberschreibung

Für 1., naja

Für 2.
Memcheck oder fastmm4 benutzen.

Ausserdem die Variable auf Änderungen überwachen.

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.


Ich würde aber erst mal mit dem property anfangen.


Heiko
Heiko
  Mit Zitat antworten Zitat
HeinzJ

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

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

  Alt 28. Apr 2009, 10:03
Glaskugel stimmt schon.
Hier der Abgespeckte Code zur veranschaulichung der oben beschriebenen Problematik.

Delphi-Quellcode:
unit Abgespeckt;

interface

uses
   Windows, Messages, SysUtils, Variants, Classes,
   Graphics, Controls, Forms, DB, ADODB, Dialogs;

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

implementation

constructor AClass.Create(X: array of const);
// *************************************************
var
   key: string;
begin
   inherited Create;
   HasReadRelationListFromDB := false;
   FRelationList := nil;
end;

function AClass.GetiNumMembers: smallint;
// ............................................
begin
   MessageDlg(inttostr(RelationList.Count), mtInformation, [mbOK], 0);
end;

function AClass.GetRelationList: TStringList;
begin
   if not HasReadRelationListFromDB then //<< Hier wird HasReadRelationListFromDB als true im Debugger angezeigt.
   begin
      HasReadRelationListFromDB := true; // << Diese Zeile wird nie erreicht
      FRelationList := TStringList.Create;
      // read someting from a db.
   end;
   Result := FRelationList;
end;


end.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#5

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

  Alt 28. Apr 2009, 10:10
Hast du in den Constructor mal einen Breakpoint gesetzt um zu schauen, ob das Programm dort überhaupt vorbeikommt?

Und: Wie erstellst du die Klasse?
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#6

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

  Alt 28. Apr 2009, 10:11
Hallo,

du verschweigst uns aber den X Parameter.
Ausserdem fehlt die Benutzung der Klasse.

Wie ist denn der Wert genau am end des Konstruktors ?


Heiko
Heiko
  Mit Zitat antworten Zitat
HeinzJ

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

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

  Alt 28. Apr 2009, 10:29
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.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#8

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

  Alt 28. Apr 2009, 10:34
Hallo,

und jetzt müssten wir halt noch wissen,
wo du Obj.RelationList benutzt.
Und vor allem, was du sonst noch so im Code treibst

Probier doch mal das mit dem property/Breakpoint aus.


Edit:
Zitat:
wo du Obj.RelationList benutzt.
Habe die Verwendung gefunden ...


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#9

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

  Alt 28. Apr 2009, 10:56
Edit 2:
Doch, jetzt habe ich mich von mir selber austricksen lassen.
funktioniert bei mir hervorragend:
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

AClass = class(TObject)
   protected
      FRelationList: TStringList;
      HasReadRelationListFromDB: Boolean;
      function GetiNumMembers: smallint;
      function GetRelationList: TStringlist;
   public
      constructor Create(X: array of const);
      property RelationList: TStringList read GetRelationList;
      property NumberOfMembers: smallint read GetiNumMembers;
   end;



var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var c:AClass;
begin
  c:=AClass.Create([1]);
  c.NumberOfMembers;
end;

constructor AClass.Create(X: array of const);
// *************************************************
var
   key: string;
begin
   inherited Create;
   HasReadRelationListFromDB := false;
   FRelationList := nil;
end;

function AClass.GetiNumMembers: smallint;
// ............................................
begin
   MessageDlg(inttostr(RelationList.Count), mtInformation, [mbOK], 0);
end;

function AClass.GetRelationList: TStringList;
begin
   if not HasReadRelationListFromDB then //<< Hier wird HasReadRelationListFromDB als true im Debugger angezeigt.
   begin
      HasReadRelationListFromDB := true; // << Diese Zeile wird nie erreicht
      FRelationList := TStringList.Create;
      // read someting from a db.
   end;
   Result := FRelationList;
end;
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
smudo

Registriert seit: 6. Sep 2005
Ort: Cottbus
362 Beiträge
 
Delphi XE2 Professional
 
#10

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

  Alt 28. Apr 2009, 10:58
Hallo,

ich kann leider nicht erkennen, wo die Funktion GetiNumMembers zum Tragen kommt.
Da wird MessageDlg aufgerufen und ich habe momentan auch das Problem, dass bei einigen Aufrufen der Dialog einfach übergangen wird.
Könnte es evtl. das gleiche Problem sein?

Gruß
René
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 17:46 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