Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   iOS Nicht fangbare Exception in Fmx.Forms.TCommonCustomForm.MouseUp (https://www.delphipraxis.net/209595-nicht-fangbare-exception-fmx-forms-tcommoncustomform-mouseup.html)

philipp.hofmann 27. Dez 2021 22:05

Nicht fangbare Exception in Fmx.Forms.TCommonCustomForm.MouseUp
 
Hi,

ich habe immer mal wieder Probleme in meiner App, wo ich auf einem Kundensystem Fehlermeldungen, wie die folgende zu sehen bekomme:

Delphi-Quellcode:
icTrainer                $00000001007A5590 Classes.TComponent._Release() + 32
icTrainer                $00000001006DAED4 _IntfClear(IInterface&) + 68
icTrainer                $0000000100B4E0CC Fmx.Forms.TCommonCustomForm.MouseUp(Uitypes.TMouseButton, set of Classes.System_Classes__1, Single, Single, Boolean) + 544
icTrainer                $0000000100ABBB44 Fmx.Platform.Ios.TFMXViewBase.DoLMouseUp(Single, Single, Boolean) + 96
icTrainer                $0000000100AB4E78 Fmx.Platform.Ios.TFMXViewBase.touchesEnded(Iosapi.Foundation.NSSet, Iosapi.Uikit.UIEvent) + 244
icTrainer                $00000001015F9D50 DispatchToDelphi + 144
UIKitCore                $000000018287EA98  + 6748
CoreFoundation           $0000000180402F24  + 32
CoreFoundation           $00000001803D4568  + 588
CoreFoundation           $00000001803CFAFC + 1012
CoreFoundation           $00000001803E2D7C CFRunLoopRunSpecific + 572
GraphicsServices         $000000019A6579A0 GSEventRunModal + 160
UIKitCore                $0000000182C1505C + 1080
UIKitCore                $00000001829AACE0 UIApplicationMain + 2028
icTrainer                $0000000100AACDF8 Fmx.Platform.Ios.TPlatformCocoaTouch.Run() + 88
Dies bedeutet doch, dass irgendein Objekt nicht mehr zur Verfügung steht, wenn es Released werden soll, sprich ich habe es sauber irgendwo entfernt, aber die App führt noch ein MouseUp-Event darauf durch, oder? Wie bekomme ich solche Fehlermeldungen endgültig raus? Einfach fangen in MouseUp geht leider nicht.

Grüße, Philipp

himitsu 27. Dez 2021 22:22

AW: Nicht fangbare Exception in Fmx.Forms.TCommonCustomForm.MouseUp
 
Ich seh keine Exception/Fehlermeldung (den Text).


Aber schonmal auf die Idee gekommen da zu gucken, wo es vorbei kommt, ob man dort was greifen kann?

* TCommonCustomForm.MouseUp in Fmx.Forms
* dort gibt es nur Einwas mit einem Interface (IControl)
* und davor, wo das Objekt (vermutlich) noch existiert, gibt es eine überschreibbare Methode (ObjectAtPoint)

Also ein
Delphi-Quellcode:
function ObjectAtPoint(AScreenPoint: TPointF): IControl; override;
in deine Form rein,
dort den Namen des letzten Objekts speichern/loggen,
und wenn es knallt, dann nachsehn, was das mal war.



Zitat:

Dies bedeutet doch, dass irgendein Objekt nicht mehr zur Verfügung steht
Nicht unbedingt.
Es kann auch ein ungültiger Zeiger sein oder sonstwas.

BerndS 27. Dez 2021 23:13

AW: Nicht fangbare Exception in Fmx.Forms.TCommonCustomForm.MouseUp
 
Wenn es bei _IntfClear knallt, könnte versehentlich die Klasse bereits freigegeben worden sein.

philipp.hofmann 27. Dez 2021 23:16

AW: Nicht fangbare Exception in Fmx.Forms.TCommonCustomForm.MouseUp
 
Der Fehler ist
Zugriffsverletzung bei Adresse 00000001007A5590 beim Zugriff auf Adresse 2020200A3E746E65
At address: $00000001007A5590 (Classes.TComponent._Release() + 32)

* TCommonCustomForm.MouseUp in Fmx.Forms -> dort kann ich die Exception warum auch immer nicht greifen;

Den Punkt mit dem ObjectAtPoint werde ich mal ausprobieren. Vielleicht bringt dies eine Erleuchtung. Danke.

Ich habe leider keinen Einfluss darauf, was hier noch im touchesEnded durch FMX angestoßen wird:

Delphi-Quellcode:
icTrainer                $00000001015F9D50 DispatchToDelphi + 144
UIKitCore                $000000018287EA98  + 6748
CoreFoundation           $0000000180402F24  + 32
CoreFoundation           $00000001803D4568  + 588
CoreFoundation           $00000001803CFAFC + 1012
CoreFoundation           $00000001803E2D7C CFRunLoopRunSpecific + 572
GraphicsServices         $000000019A6579A0 GSEventRunModal + 160
UIKitCore                $0000000182C1505C + 1080
UIKitCore                $00000001829AACE0 UIApplicationMain + 2028
icTrainer                $0000000100AACDF8 Fmx.Platform.Ios.TPlatformCocoaTouch.Run() + 88
Natürlich kann es sein, dass ich hier ein Objekt freigegeben habe. Ich stoße aber ja die Funktion an der Stelle nicht an, dies macht die FMX-Implementierung.

junglist 28. Dez 2021 07:31

AW: Nicht fangbare Exception in Fmx.Forms.TCommonCustomForm.MouseUp
 
Solche Fehler sind mir schon ein paar Mal passiert. Meistens hatte ich dann einen Button der das aktive Frame auf irgendeiner Weise freigegeben hat. Es passiert auch nur auf iOS, nicht so auf Android und Windows.

Das MouseUp-Event kommt ja (wahrscheinlich?) von einem Klick-Event der die Form frei gibt. Wenn du dir vorstellen kannst wo das sein könnte, versuch mal um den Inhalt des Klicks ein TThread.ForceQueue() zu machen.

himitsu 28. Dez 2021 12:01

AW: Nicht fangbare Exception in Fmx.Forms.TCommonCustomForm.MouseUp
 
Die Interfaces bei TComponent/TControl haben keine Referenzzählung.
Speicherverwaltung wird über TComponent des FMX/VCL geregelt und Interfaces darauf sind nur während der Existenz (vor Free/Destroy) gültig.

Gibt man z.B. mitten im OnClick das angeklickte Objekt frei, dann knallt es nunmal gerne.

philipp.hofmann 17. Jan 2022 21:36

AW: Nicht fangbare Exception in Fmx.Forms.TCommonCustomForm.MouseUp
 
Einen ersten Grund habe ich schon mal: Wenn ich ein Parent auf einem Element setze, welches genau dieses Parent schon hat, dann kommt genau dieser Fehler (zumindest unter Android) nachgestellt. in FMX.TForms.TCommonCustomForm.MouseUp. Das konnte ich einfach entfernen.


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