Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   MacOS-64: Exceptions mittels Map-Datei ausgeben (https://www.delphipraxis.net/202787-macos-64-exceptions-mittels-map-datei-ausgeben.html)

philipp.hofmann 9. Dez 2019 09:53

MacOS-64: Exceptions mittels Map-Datei ausgeben
 
Hi,

ich habe aktuell das Problem, dass meine Anwendung im Modus "Normal" kompiliert, tadellos funktioniert und sobald ich sie mit Entwickler-ID kompiliere, kommen Fehlermeldungen wie
"Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSDictionaryM setObject:forKey:]: key cannot be nil'".
Ich bekomme da keinen richtigen Griff dran, wie ich das Problem einkreise. Meine Logs geben mir auch nach Erweiterung keinen Aufschluss.

Jetzt würde ich gerne wieder die Exceptions über die Map-Datei schöner ausgeben können, also auch dort, wo ich wirklich in der Anwendung die Exception sehe.
Ich scheitere aktuell daran, dass meine dafür unter MacOS-32 genutzte Klasse bei der Initialisierung folgenden Code verwendet:

Delphi-Quellcode:
procedure InstallExceptionHandler;
{$IFDEF MACOS32}
var U: TUnwinder;
{$ENDIF}
begin
{$IFDEF MACOS32}
  GetUnwinder(U);
  Assert(Assigned(U.RaiseException));
  PrevRaiseException := U.RaiseException;
  U.RaiseException := RaiseException;
  SetUnwinder(U);
  mapDict:=nil;
{$ENDIF}
end;

procedure UnInstallExceptionHandler;
{$IFDEF MACOS32}
  var U: TUnwinder;
{$ENDIF}
begin
  {$IFDEF MACOS32}
  GetUnwinder(U);
  U.RaiseException := PrevRaiseException;
  SetUnwinder(U);
{$ENDIF}
end;
Die Abfrage auf MACOS32 erfolgt hier, weil PC_MAPPED_EXCEPTIONS unter MACOS64 nicht definiert ist.
Folgende Fragen:

a) Hat jemand eine Idee, wie man einer solchen Exception auf den Grund geht, die abhängig ist von der genutzten Kompiler-Konfiguration Normal vs. Entwickler-ID?
b) Kennt jemand einen Grund, warum PC_MAPPED_EXCEPTIONS für MACOS64 nicht definiert ist?
c) Kann ich {$DEFINE PC_MAPPED_EXCEPTIONS} irgendwo eintragen, damit das Feature zurückkommt (und falls ja, wo)?

Grüße, Philipp

philipp.hofmann 9. Dez 2019 12:51

AW: MacOS-64: Exceptions mittels Map-Datei ausgeben
 
P.S.: Die erste Exception unter MacOS-64 konnte ich schon mal so beheben, diese gab es aber auch im Normal-Modus: Wenn man in einem TMS-FMX-Grid mehrfach die addButton-Funktionalität nutzt und diese Buttons dann auch klickt, crasht es unter MacOS-64, ist an TMS-Software gemeldet. Die Buttons habe ich mir Bitmaps ersetzt und schon geht es. Es ist nur leider nicht mein einziges Problem. An dem Beispiel sieht man aber, wie tricky die Fehlersuche ist, wenn es in den Tiefen solche OS-Unterschiede gibt und die Exception-Ausgabe nicht funktioniert. Ich werde mir daher überlegen müssen, ob ich nicht auch teilweise wieder in MacOS-32 testen möchte (was dann nur gegen Catalina nicht geht).

himitsu 9. Dez 2019 16:15

AW: MacOS-64: Exceptions mittels Map-Datei ausgeben
 
Entscheiden kannst du nichts.

Es hängt davon ab, wie das jeweilige OS die Exceptions verwaltet.
Code:
STACK_BASED_EXCEPTIONS  Registration Records on Stack      Win32, Java
TABLE_BASED_EXCEPTIONS  Table for all Funktions            Win64           https://docs.microsoft.com/en-us/cpp/build/exception-handling-x64
PC_MAPPED_EXCEPTIONS    Program Counter Mapped Exceptions  Mac, Linux     http://docwiki.embarcadero.com/RADStudio/Rio/en/PC-Mapped_Exceptions

Sorry, bin leider noch mit Windows beschäftigt ... Linux, Android vielleicht nächstes Jahr und I-Produkte hab ich nicht

philipp.hofmann 9. Dez 2019 17:59

AW: MacOS-64: Exceptions mittels Map-Datei ausgeben
 
Ich habe es mal als Fehler eingestellt (RSP-27172). In der Liste steht ja MacOS, nur dass das Exception-Handling für MacOS-32 aktuell anders ist als für MacOS-64 und in der Liste für Rio steht nur generell MacOS, so dass ich schätze, dass dies so nicht sein sollte.

himitsu 15. Dez 2019 14:12

AW: MacOS-64: Exceptions mittels Map-Datei ausgeben
 
Joar, als 32 Bit damals urplötzlich unvorhergesehn schlagartig ausstarb, da musste Emba das halt schnell umbauen. :stupid:
(auch wenn schnell fast schon bissl zu lange dauerte)

philipp.hofmann 20. Dez 2019 15:35

AW: MacOS-64: Exceptions mittels Map-Datei ausgeben
 
Antwort von Marco Cantu:
Zitat:

As per the comment, macOS 64-bit compiler uses LLVM architecture and a different exceptions handling code. We can consider offering ways to analyze the exceptions stack for LLVM platforms, but that's a separate request from this one.
Na dann hoffen wir mal, dass sich hier noch etwas bewegt, das passende Feature-Request: RSP-27297 - MacOS-64: way to print out exception stack trace


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