AGB  ·  Datenschutz  ·  Impressum  







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

Automatische Problem-Erkennung

Ein Thema von Incocnito · begonnen am 26. Okt 2023 · letzter Beitrag vom 2. Nov 2023
 
Incocnito

Registriert seit: 28. Nov 2016
210 Beiträge
 
#1

Automatische Problem-Erkennung

  Alt 26. Okt 2023, 08:52
Moin zusammen.

Wir hatten heute einen Fehler gefunden, der nicht sofort ersichtlich ist.

Delphi-Quellcode:
...
type TWhatever = class(TForm)
  public
    Procedure DoSomething(const sVal : String);
    Procedure DoMore();
  private
    FMyVal : String;
  end;
...
procedure TWhatever.DoMore();
begin
  DoSomeThing(FMyVal);
end;

procedure TWhatever.DoSomething(const sVal : String);
begin
  FMyVal := '';
  if (sVal = 'bla') then Close();
end;
...
Hier wird in DoMore die Variable FMyVal übergeben und da sVal in DoSomething als const deklariert ist,
erstellt Delphi hier keine Kopie, sondern arbeitet auf dem Original.
Jetzt nehme ich aber in der ersten Zeile ihm das Original unter dem Arsch weg.
Das führt zu Speicherfehlern und dann random irgendwo zu Zugriffsverletzungen.

Lösung hier: "const" weg nehmen, so dass Delphi für sVal eine Kopie anlegt.

Frage: Gibt es eine (automatisierbare) Möglichkeit solche Konstellationen zu erkennen?
Ich würde gerne ausschließen, dass wir solche Fehler irgendwo vertseckt haben und
ich weiß nicht, wie ich sowas suchen kann. Selbst wenn das Problem nicht mehr erkannt werden
kann, wenn Funktionen andere Funktionen aufrufen, die dann den Ursprungswert modifizieren.
Dieser Fehler beunruhigt mich nun doch schon etwas. Und da jetzt "überall" etwas zu bauen, dass
beim Funktionsaufruf den Speicher schützt und entsprechende Exceptions wirft, wenn dieser doch
bearbeitet wird, würde zudem ewig dauern und Ressourcen und Performance fressen.

Vielleicht hat da ja jemand eine Idee zu.

Liebe Grüße
Incocnito
  Mit Zitat antworten Zitat
 


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 20:26 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