AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

D7 Überlaufprüfung ausschalten

Ein Thema von p80286 · begonnen am 2. Nov 2015 · letzter Beitrag vom 2. Nov 2015
Antwort Antwort
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#1

D7 Überlaufprüfung ausschalten

  Alt 2. Nov 2015, 17:55
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#2

AW: D7 Überlaufprüfung ausschalten

  Alt 2. Nov 2015, 18:16
Menü Projekt
Untermenü Optionen (Umsch+Strg+F11)
Reiter Compiler
rechte Groupbox Laufzeitfehler
3. Option = Überlaufprüfung
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#3

AW: D7 Überlaufprüfung ausschalten

  Alt 2. Nov 2015, 18:45
jain, das hat nicht so richtig funktioniert!
(nachdem ich das {$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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
delnu
(Gast)

n/a Beiträge
 
#4

AW: D7 Überlaufprüfung ausschalten

  Alt 2. Nov 2015, 23:38
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.
  Mit Zitat antworten Zitat
Antwort Antwort


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 23:43 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