Autor Beitrag
DelphiMan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 73



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Sa 24.05.03 18:08 
wie heißt denn Deine Variable :?:

_________________
Gruß
Hansa
Alibi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 458

Win2K SP3
Delphi 6 Ent
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 73



BeitragVerfasst: Sa 24.05.03 18:16 
Titel: bsp
Habe bspw. folgendes:

ausblenden volle Höhe Quelltext
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 458

Win2K SP3
Delphi 6 Ent
BeitragVerfasst: Sa 24.05.03 18:23 
Nein, wieso ein Bug?
Er erkennt, dass die Zeilen sinnlos sind und streicht sie.
DelphiMan Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 73



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 458

Win2K SP3
Delphi 6 Ent
BeitragVerfasst: Sa 24.05.03 18:59 
Wo ist der Sinn für eine solche Option?
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 24.05.03 19:03 
Schalt in den Projekt-Optionen die Optimierung aus.
Brueggendiek
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 304

Win 98, Win98SE, Win XP Home
D5 Std
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 73



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 73



BeitragVerfasst: 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