AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Auf legalen zugriff prüfen vor AV oder SegFault

Auf legalen zugriff prüfen vor AV oder SegFault

Ein Thema von QuickAndDirty · begonnen am 7. Okt 2019 · letzter Beitrag vom 11. Okt 2019
Antwort Antwort
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.584 Beiträge
 
Delphi 10.3 Rio
 
#1

Auf legalen zugriff prüfen vor AV oder SegFault

  Alt 7. Okt 2019, 13:25
Hallo,
wenn man Fehler macht kann es ja vorkommen, dass auch ein Zugriff über eine Objektvariable die "Assigned" ist zu einer Zugriffsverletzung führt.

Da es "jemanden" gibt der diese Exception wirft müsste es doch auch möglich sein darauf zu prüfen bevor die zugriffsverletzung passiert, oder?
Delphi-Quellcode:
If islegal(Myobject.free) then
Begin

end;
Oder?
Andreas
#PerfMatters

Geändert von QuickAndDirty ( 7. Okt 2019 um 13:37 Uhr)
  Mit Zitat antworten Zitat
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
767 Beiträge
 
Delphi 2007 Professional
 
#2

AW: Auf legalen zugriff prüfen vor AV oder SegFault

  Alt 7. Okt 2019, 13:52
Nein, nicht wirklich. Zugriffe auf bereits freigegebene Objekte können eine Zeit lang weiterhing funktionieren (wenn auch ggf. Unsinn anstellen), solange deren Speicher nicht anderweitig benutzt wurde.

Und selbst wenn nicht, muss ja nicht immer ein ungültiger Self-Pointer sein, der einen Exception auslöst, sondern es kann eine im Objekt verwendete andere Objektreferenz sein, die inzwischen überschrieben wurde oder ein Pointer auf einen String oder auf ein Array.

Je nachdem, wen man fragt, wird FreeAndNil empfohlen oder davon abgeraten. Zumindest sorgt es in den einfachen Fällen (also: Es gibt nur eine Referenz auf das Objekt) dafür, dass es keine Pointer auf freigegebene Objekte übrigbleiben.
Thomas Mueller
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
372 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Auf legalen zugriff prüfen vor AV oder SegFault

  Alt 7. Okt 2019, 14:09
Hallo,
wenn man Fehler macht kann es ja vorkommen, dass auch ein Zugriff über eine Objektvariable die "Assigned" ist zu einer Zugriffsverletzung führt.

Da es "jemanden" gibt der diese Exception wirft müsste es doch auch möglich sein darauf zu prüfen bevor die zugriffsverletzung passiert, oder?
Delphi-Quellcode:
If islegal(Myobject.free) then
Begin

end;
Oder?
Ganz so einfach ist die Sache nicht, die Exception kommt irgendwo aus den Tiefen der virtuellen Speicherverwaltung des Betriebssystems, und es kommt nicht nur auf die Adresse selbst an, sondern auch darauf, was man damit anstellt (lesen, schreiben, ausführen), und wohin der Pointer zeigt (stack, Delphi memory manager heap, OS memory). Es gibt zwar OS-Funktionen wie IsBadReadPtr, IsBadWritePtr, IsBadCodePtr, VirtualQueryEx, aber die sind nur begrenzt nützlich. Selbst wenn MyObject eine legal aussehende Adresse enthält (z. B. aus einem Block des MMs) muß sie ja nicht auf eine Objekt der erwarteten Klasse zeigen, und selbst wenn sie das tut ist nicht gesagt, dass der Inhalt des Objektes noch in Ordnung ist. Im Allgemeinen ist dies eine Aufgabe aus der Klasse "Fool's errant", es ist pure Zeitverschwendung da schlicht nicht final lösbar. Halt lieber Disziplin, setz konsequent FreeAndNil für Objektvariablen ein, die außerhalb des lokalen Scopes sichtbar sind, oder verwende lifetime management über Interfaces anstelle von Objektreferenzen.
Peter Below
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.584 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Auf legalen zugriff prüfen vor AV oder SegFault

  Alt 8. Okt 2019, 12:05
Ich habe das nicht ganz in der Hand ob der HttpLocalRIO oder so ähnlich für das Soap Framework von Delphi noch existiert oder nicht.
Desegen würde ich gerne auf sowas wie BadPointEr prüfen, auf allen Platformen.



Zurzeit läuft all das über Exceptions...und das ist mehr als nervtötend beim debuggen
Ich habe ein hierarchy von verbindungs Möglichkeiten für den SOAP client
-internet domain
-globale IP
-Localhost

Ob und wie lange HTTPLOCALRIO nach einem fehlgeschlagenen verbindungsversuch existiert habe ich nicht in der Hand.
Also kann ich nicht vorher wissen ob ein Free notwendig ist oder ich damit weiter arbeiten kann.
Also mache ich dann ein free und das kann wenn es nicht notwendig war Zugriffsverletzungen erzeugen...
Und dann erzeuge ich den HTTPLOCALRIO neu.


Gibt es Badpointer auch auf Android und IOS?
Andreas
#PerfMatters
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
3.762 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#5

AW: Auf legalen zugriff prüfen vor AV oder SegFault

  Alt 8. Okt 2019, 13:54
Speziell auf SOAP und diese RIO Klassen bezogen, glaub ich eher, du benutzt das falsch. Denn diese Klassen sind eigentlich dafür da, sie über ein von ihnen dynamisch implementieres Interface (Stichwort: TVirtualInterface) anzusprechen. Und dann greift Referenzzählung von Interfaces.

Zu der Problematik allgemein: Ich hab vor längerer Zeit Weak References in Spring eingebaut und mit diesen kann man auch einfach implementieren, dass man automatisch ObjektReferenzen auf nil setzen lässt, wenn das entsprechende Objekt freigegeben wird, so dass sie dann nicht mehr auf ungültigen Speicher zeigen (Stichwort: dangling pointer)

Theoretisch kann man sogar den in der RTL implementieren Mechanismus benutzen, allerdings sind alle notwendigen Routinen dafür (RegisterWeakRef und UnregisterWeakRef in System.pas) nicht von außen zugänglich.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.584 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Auf legalen zugriff prüfen vor AV oder SegFault

  Alt 11. Okt 2019, 11:11
Ja, richtig benutzt ist der SoapClient wohl nicht dazu geeignet um festzustellen ob ein Dienst auf verscheidnen Gegenstellen erreichbar ist..

Spring funktioniert in Delphi?

Spring im Sinne von Aspektorientierte Entwicklung?
Andreas
#PerfMatters

Geändert von QuickAndDirty (11. Okt 2019 um 11:24 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.549 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Auf legalen zugriff prüfen vor AV oder SegFault

  Alt 11. Okt 2019, 13:52
Spring im Sinne von: https://bitbucket.org/sglienke/spring4d/src/master/

Sherlock
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 11:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2020 by Daniel R. Wolf