Have an amazing solution built in RAD Studio? Let us know. Looking for discounts? Visit our Special Offers page!
BeiträgeC++RAD Studio

Robuste Ausnahmebehandlung in C ++ Builder 10.4.2

close up broken egg isolated on white background

Qualitätsfreigabe

C ++ Builder 10.4.2 bietet einige großartige Funktionen, von denen wir glauben, dass sie Ihnen wirklich helfen werden – die größte davon ist “ Split DWARF „, eine Möglichkeit, die Speichernutzung im Linker durch Entfernen von Debug-Informationen zu reduzieren. Wenn Sie Projekte haben, die die Grenzen des Linkers überschreiten, probieren Sie es aus: Es kann Ihre Probleme lösen (siehe diesen Blog-Beitrag ). RAD Studio 10.4.2 war jedoch insgesamt auch eine „Qualitätsversion“. Obwohl 10.4.1 die Version ist, die auf Qualität und 10.4.2 auf die von Ihnen benötigten Funktionen abzielt, haben wir in 10.4.2 mehr Probleme behoben als in 10.4.1!

Und C ++ Builder ist keine Ausnahme.

C ++ – Ausnahmebehandlung

Dieses wunderbare Wortspiel führt in die Ausnahmebehandlung ein, die wir in 10.4.2 durchgeführt haben. Wenn dies zu lang ist, bietet die TLDR: 10.4.2 Ihren Apps eine sehr hohe Stabilität und ein korrekteres Verhalten bei der Behandlung von Ausnahmen.

Wir analysieren Kategorien von Problemberichten, die wir erhalten, und leisten viel Arbeit, um Probleme intern zu finden. Ein Teil dieser Arbeit erfolgt durch die Unterstützung von C ++ – Bibliotheken : Die Verwendung von externem Code ist ein guter Weg, um sicherzustellen, dass unsere Toolchain kompatibel ist. Aufgrund dieser Analysen haben wir in 10.4.2 einen Großteil unserer Ausnahmebehandlung für Windows überarbeitet.

Die Szenarien, die wir uns angesehen haben, sind:

  • Ausnahmen im Modul , wenn eine Ausnahme ausgelöst und in derselben Binärdatei abgefangen wird, z. B. alle innerhalb einer EXE-Datei.
  • Modulübergreifende Ausnahmen , wenn eine Ausnahme eine Modulgrenze überschreitet, z. B. wenn sie in einer DLL ausgelöst, aber in einer EXE-Datei abgefangen wird. Dies ist eine schwierigere Situation, und die Codierungsrichtlinien weisen darauf hin, dass keine Ausnahmen aus einem Modul in ein anderes gelangen sollten. Wir sehen jedoch Code, wo dies auftritt, und es ist ein wichtiges Szenario, das angegangen werden muss. Dies ist bei Paketen üblich oder wenn mehrere DLLs und eine EXE-Datei als App gebündelt sind.
  • Sprachübergreifende Ausnahmen , wenn eine Ausnahme Stapelrahmen überschreitet, die sowohl zu Delphi als auch zu C ++ gehören. Ausnahmen können in einer Sprache ausgelöst und in einer anderen abgefangen werden oder die Grenze mehrmals überschreiten.
  • Wenn alle Module (z. B. sowohl eine EXE- als auch eine DLL-Datei) statisch verknüpft sind oder alle Module dynamisch verknüpft sind (dynamische RTL).
  • OS-, C ++ – und SEH- Ausnahmen
  • Sowohl Win32- als auch Win64- Plattformen.

Viele dieser Szenarien, insbesondere modulübergreifende Szenarien mit unterschiedlichen Verknüpfungen, können komplex werden. Einer der Hauptgründe ist die Behandlung der Freigabe einer Ausnahme oder von Ausnahmemetadaten in der RTL. Angenommen, eine DLL, die vollständig statisch verknüpft ist und über eine eigene Kopie der RTL verfügt, löst eine Ausnahme aus. Wie kann eine EXE-Datei, die auch statisch mit ihrer eigenen Kopie der RTL verknüpft ist oder dynamisch verknüpft ist, aber dennoch eine andere Kopie der RTL als die DLL hat, mit der Freigabe des mit der Ausnahme verbundenen Speichers umgehen?

In 10.4.2 behandeln wir diese Szenarien und unterstützen Anwendungen, bei denen alle Module statisch oder alle dynamisch verknüpft sind. Wir unterstützen keine modulübergreifenden Ausnahmen in Mischungen aus dynamischer / statischer RTL innerhalb einer Anwendung.

Dies bedeutet, dass Sie in 10.4.2 ein deutlich verbessertes Verhalten bei der Ausnahmebehandlung und eine große Anzahl von Qualitätsproblemen sehen sollten, die für modulinterne Ausnahmen, modulübergreifende Ausnahmen, bei denen alle Module statisch oder alle dynamisch verknüpft sind, für OS, C ++ und SEH behoben wurden Ausnahmen und sowohl über Win32 als auch über Win64 – eine massive Testmatrix.

Mit jeder Version wollen wir C ++ Builder stetig verbessern, und 10.4.2 ist – man könnte sagen – außergewöhnlich.


Reduce development time and get to market faster with RAD Studio, Delphi, or C++Builder.
Design. Code. Compile. Deploy.
Start Free Trial   Upgrade Today

   Free Delphi Community Edition   Free C++Builder Community Edition

Kommentieren

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

IN THE ARTICLES