Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   D7 Überlaufprüfung ausschalten (https://www.delphipraxis.net/187162-d7-ueberlaufpruefung-ausschalten.html)

p80286 2. Nov 2015 16:55

D7 Überlaufprüfung ausschalten
 
Hallo zusammen,
ich weiß wahrscheinlich stehts in der OH, aber ich bin zu blöd es zu finden:
Delphi-Quellcode:
begin
  h := 0;
{$Q-}
  for i := 1 to Length(k) do
    h := h*129 + ord(k[i]) + $9e370001; {---- hier knallt es!}
{$Q+}
  Result := h;
end;
das ist aus Superobject.pas, wofür $Q gut ist ist auch klar, aber es wird nicht beachtet.
Wie kriege ich es hin, daß diese Compilerdirektiven auch wirklich beachtet werden?

Gruß
K-H

nahpets 2. Nov 2015 17:16

AW: D7 Überlaufprüfung ausschalten
 
Menü Projekt
Untermenü Optionen (Umsch+Strg+F11)
Reiter Compiler
rechte Groupbox Laufzeitfehler
3. Option = Überlaufprüfung

p80286 2. Nov 2015 17:45

AW: D7 Überlaufprüfung ausschalten
 
jain, das hat nicht so richtig funktioniert!
(nachdem ich das
Delphi-Quellcode:
{$Q+}
auskommentiert hatte, war Ruhe, aber glücklich bin ich damit nicht, da die Prüfung zumindest während der Entwicklung für alle anderen Code-Teile aktiv sein sollte.
Gibt es da nicht noch irgendwie so etwas wie eine Unit ohne Debugger-Zugriff oder ähnliches?

Gruß
K-H

delnu 2. Nov 2015 22:38

AW: D7 Überlaufprüfung ausschalten
 
Das {Q+} darfst Du erst hinter der wirklichen Auswertung setzen.

Probier es mal ungefähr so :
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
 erg,
 h: longint;
 k: string;

function sub: longint;
var
 i: byte;
begin
  h := 0;
{$Q-,R-}
  for i := 1 to Length(k) do
    h := h*129 + ord(k[i]) + $9e370001; {---- hier knallt es!}
// Hier bringt {Q+} nichts.
  Result := h;
end;

begin
 k:= 'bla';
 erg:=sub; showmessage(inttostr(erg));
{$Q+,R-} // Hier wurde die Auswertung vorgenommen, also kann die Prüfung wieder aktiviert werden.
end;
Weil die Variablentypen und ihre Werte aus Deinem Beispiel nicht so ganz ersichtlich sind, habe ich einfach irgendwas genommen, das dennoch den Fehler reproduziert bzw. abfängt. Es ist sinnvoll, außer der Überlaufprüfung auch die Bereichsüberprüfung abzustellen. Sowas sollte aber immer nur bis zum Herausfinden der Fehlerursache geschehen. Oft helfen Klammerungen und Typenumwandlungen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:23 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