| Autor |
Beitrag |
DelphiMan
      
Beiträge: 73
|
Verfasst: Sa 24.05.03 17:54
Hallo zusammen,
das ist ja vielleicht sehr sehr merkwürdig und seltsam:
ich habe eine procedure deklariert und implementiert. deklariert man nun eine lokale variable in dieser prozedur wird die zeile beim compilieren einfach ignoriert und der haltepunkt - den ich gesetzt habe - wird zu einem kreuz. ok, ich habe der variablen bisher zwar lediglich einen wert zugewiesen und sonst nix weit mit gemacht - aber eine universelle programmiersprache wie delphi sollte doch auch dann den code den man geschrieben hat auch ausführen und sei er noch so stumpfsinnig wie nur einer LOKALEN variablen (bei globalen funktionierts) einen wert zuweisen und nix weiter mit der variablen machen... kann man das vielleicht bei compiler eigenschaften einstellen? wenn ja, wo und wie?
über schnelle hilfe würde ich mich freuen!!
vielen dank im voraus!
MfG
DelphiMan
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Sa 24.05.03 18:08
wie heißt denn Deine Variable 
_________________ Gruß
Hansa
|
|
Alibi
      
Beiträge: 458
Win2K SP3
Delphi 6 Ent
|
Verfasst: Sa 24.05.03 18:16
Ich tippe mal darauf, dass du die Variable in der Procedure nach der Zeile nicht weiter verwendet hast?
Wenn ja, dann optimiert der Compiler die Zeile einfach raus. 
|
|
DelphiMan 
      
Beiträge: 73
|
Verfasst: Sa 24.05.03 18:16
Titel: bsp
Habe bspw. folgendes:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } procedure wasauchimmer; public { Public-Deklarationen } end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure tform1.wasauchimmer; var a,b: integer; begin a := 10; b := 1; end;
procedure TForm1.Button1Click(Sender: TObject); begin wasauchimmer; end;
end. |
setze jetzt zwei haltepunkt vor a := 10; und b := 1; und compiliere. beide zeilen werden einfach ignoriert, ein kreuz erscheint anstelle der haltepunkt und selbst wenn man den button drückt passiert nix!!!
das ist ja wohl ein klarer compiler bug oder etwa nicht?? auch wenn nix weiter mit den variablen gemacht wird müssten sie so initialisiert werden!
Habt ihr eine abhilfe, erklärung oder was auch immer dafür?
MfG
DelphiMan
|
|
Alibi
      
Beiträge: 458
Win2K SP3
Delphi 6 Ent
|
Verfasst: Sa 24.05.03 18:23
Nein, wieso ein Bug?
Er erkennt, dass die Zeilen sinnlos sind und streicht sie.
|
|
DelphiMan 
      
Beiträge: 73
|
Verfasst: Sa 24.05.03 18:51
Titel: ?
Gibt es eine Compiler-Direktive order ähnliches die den compiler dazu veranlasst ALLE befehlszeilen - ob sinnlos oder nicht - zu compilieren?
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Sa 24.05.03 18:59
Mensch DelphiMan,
natürlich compiliert der die, aber der Linker schmeißt das überflüssige raus. Unsinige Sachen kosten nur Speicherplatz. Und was soll der Debugger Dir da anzeigen? Unbenutze Variablen führt der sogar auf, um den Ballast endlich zu entfernen. Warum soll der überhaupt nie benutzte anzeigen? Bin ziemlich sicher, daß sogar die Deklarationen weg wären, wenn sie nicht eventuell in der Entwicklungszeit eines Programmes für spätere Aktivitäten benötigt werden.
_________________ Gruß
Hansa
|
|
Alibi
      
Beiträge: 458
Win2K SP3
Delphi 6 Ent
|
Verfasst: Sa 24.05.03 18:59
Wo ist der Sinn für eine solche Option?
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 24.05.03 19:03
Schalt in den Projekt-Optionen die Optimierung aus.
|
|
Brueggendiek
      
Beiträge: 304
Win 98, Win98SE, Win XP Home
D5 Std
|
Verfasst: Sa 24.05.03 19:28
Hallo DelphiMan!
Was sagt denn der Compiler zu den unsinnigen Zuweisungen? Doch sicher:
"[Hinweis] B_HAUPT.PAS(500): Auf 'x' zugewiesener Wert wird niemals benutzt" - oder hast Du die Warnungen ausgeschaltet?
Delphi optimiert normalerweise so viel wie möglich. Das bedeutet beim Debuggen dann auch, daß nach dem letzten Zugriff auf eine Variable diese für den Debugger nicht mehr zur Verfügung steht.
Fazit: Solange das Projekt nicht fertig ist, sollte unter "Optionen, Compiler" immer Optimierung ausgeschaltet werden!
Gruß
Dietmar Brüggendiek
|
|
DelphiMan 
      
Beiträge: 73
|
Verfasst: Sa 24.05.03 19:29
Titel: alles klar
"Bin ziemlich sicher, daß sogar die Deklarationen weg wären, wenn sie nicht eventuell in der Entwicklungszeit eines Programmes für spätere Aktivitäten benötigt werden"
Genau so ist es bei mir, ich bin halt noch nicht fertig mit dieser prozedur, variablen usw. definiert und wollte dann halt per breakpoints überprüfen ob der wert stimmt. das ist alles. mich hat es halt irritiert, dass er diese zeile nicht compiliert hat.
habe eine variable x = record a,b:double end; x.a und x.b habe ich im oncreate definiert. ebenso habe ich beiden einen neuen wert in einer eigenen prozedur die im oncreate aufgerufen wird zugeordnet. nun habe ich breakpoints bei beiden zuordnungen gesetzt. x.a compiliert er, breakpoint kann ausgewertet werden zur laufzeit, x.b nicht. und genau das finde ich immer noch merkwürdig.
aber naja, ist ja im prinzip auch nicht schlimm, da die variablen ja noch nicht wirklich benötigt werden. sobald dies der fall ist gehts ja.
also, danke jedenfalls.
MfG
DelphiMan
|
|
DelphiMan 
      
Beiträge: 73
|
Verfasst: Sa 24.05.03 19:31
Titel: danke
@brueggendiek:
ja genau dieser hinweis wird gemeldet.
das mit optimieren ausstellen solange projekt nicht abgeschlossen find ich eine gute idee. danke
MfG
DelphiMan
|
|