AGB  ·  Datenschutz  ·  Impressum  







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

Object wird manchmal nicht erzeugt

Ein Thema von Hobbycoder · begonnen am 11. Mai 2020 · letzter Beitrag vom 13. Mai 2020
Antwort Antwort
Hobbycoder

Registriert seit: 22. Feb 2017
1.017 Beiträge
 
#1

AW: Object wird manchmal nicht erzeugt

  Alt 13. Mai 2020, 10:30
Danke für die Antwort.

Der Thread uSQLThread.SQLSaveCallActivity wird aus einem anderen WorkerThread heraus aufgerufen. Dieser hält die Klasse TDBSettings in dem Object FDBSettings, welches zu beginn des Threads erzeugt und erst am Ende wieder freigegeben wird. Der WorkerThread ist über die gesamte Programmlaufzeit aktiv und wird nicht unterbrochen oder neugestartet.
Weiterhin wird das Object FDBSettings noch an ganz viele andere Threads (ähnlich uSQLThread.SQLSaveCallActivity) übergeben, die andere Datenbank aufgaben erledigen.
Die laufen, auch an dem betroffenen PC, alle fehlerfrei. Von daher kann ich davon ausgehen, dass das Object auch noch existiert wenn es an die Create-Methode von uSQLThread.SQLSaveCallActivity übergeben wird.

Wie gesagt, ich habe das Problem nur an einem von 6 Clients, und kann mir das nicht erklären. Als Fehlermeldung bekomme ich eine EAccessViolation genau im Setter von TDBSettings.Hostname. Ich bekomme lediglich einen BugReport von MadExcept. Ich konnte auch bisher den Fehler bei mir nicht nachstellen oder nachvollziehen. Und, das kann ich den Datenbankeinträgen entnehmen, tritt er über die Programmlaufzeit nicht bei jedem Threadaufruf von uSQLThread.SQLSaveCallActivity auf. Und der ist auch über die gesamte Programmlaufzeit immer der gleiche, weil es dafür nur eine Procedure gibt.

Und doch bin ich mir ganz sicher, dass der Fehler irgendwo bei mir liegen muss. Normalerweise kann man, gerade bei EAccessViolation recht schnell den Punkt finde, wo ein Object fälschlicherweise nicht Erzeugt oder zu früh zerstört wurde. Aber der oben gezeigte Code läßt soch gar keinen Spielraum zu, in dem das passieren könnte. Oder übersehe ich was?
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.

Geändert von Hobbycoder (13. Mai 2020 um 11:15 Uhr)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Object wird manchmal nicht erzeugt

  Alt 13. Mai 2020, 12:19
Hallo,

procedure TDBSettings.AssignTo(Dest: TObject);
var
sDestClassName: String;
begin
sDestClassName:= Dest.ClassName; // Test, ob hier MadExcept was anzeigt

if Dest is TDBSettings then
Heiko
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.493 Beiträge
 
Delphi 12 Athens
 
#3

AW: Object wird manchmal nicht erzeugt

  Alt 13. Mai 2020, 13:15
"Dest" ist mit sicherer Wahrscheinlichkeit vorhanden, sonst würde der vorherige Test mit "is" bereits fehlschlagen.
Ich vermute das an dieser Stelle "Self" = nil ist oder ungültig.

Auf EAccessViolation kann man sich nur verlassen, wenn auf nil-Pointer zugegriffen wird. Wenn der angesprochene Speicherbereich noch vom Speichermanager verwendet wird und somit das Programm noch das Recht hat auf disen Speicherbereich zuzugreifen, verhält sich das Programm eventuell nur merkwürdig.
  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 16:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz