Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   mysteriöse Exception (https://www.delphipraxis.net/204490-mysterioese-exception.html)

UliTs 1. Jun 2020 13:31

mysteriöse Exception
 
Hallo,

ich habe in Zusammenhang mit FireDac und Erstellen eines neuen Diaologs ein mysteriöses Problem.
Faul wie ich bin, habe ich kurzerhand einen bestehenden Dialog mittels "speichern unter" dupliziert, den neuen Dialog angepaßt und ebenso in das Projekt eingebunden.
Scheinbar funktioniert auch alles. Jedoch kommt beim Scrollen in DBGrid nach einiger Zeit (evtl immer bei den gleichen Datensätzen) die folgende Fehlermeldung:

Code:
Im Projekt Test.exe ist eine Exception der Klasse $C0000005 mit der Meldung 'access violation at 0x0040ad08:
read of address 0x20726168 aufgetreten.
Wenn man auf "Anhalten" klickt, sieht man anschließend CPU-Assemblercode und es hilft nur der Abbruch der Ausführung.

Ich habe keine Ahnung warum es dazu kommt. Kennt jemand so ein Problem? Und wie könnte man der Ursache auf den Grund kommen?

blawen 1. Jun 2020 18:06

AW: mysteriöse Exception
 
Zitat:

Zitat von UliTs (Beitrag 1466030)
Hallo,

ich habe in Zusammenhang mit FireDac und Erstellen eines neuen Diaologs ein mysteriöses Problem.
Faul wie ich bin, habe ich kurzerhand einen bestehenden Dialog mittels "speichern unter" dupliziert, den neuen Dialog angepaßt und ebenso in das Projekt eingebunden.
Scheinbar funktioniert auch alles.

Hast Du den Namen des Dialogs auch angepasst?

Sherlock 2. Jun 2020 08:22

AW: mysteriöse Exception
 
Falls Du das beruflich machst, kauf Dir MadExcept. Machst Du das privat lad es Dir einfach runter. Das eröffnet Dir eine neue Welt bei der Fehlersuche.

Sherlock

rabatscher 2. Jun 2020 08:36

AW: mysteriöse Exception
 
Hi!

Solche Exceptions kommen normalerweise, wenn ein Aufruf an eine Windows lib (z.B. WinRT oder eine dll) gemacht wird, das entweder ungültige Daten oder einen Nullpointer enthält (zumindest wars bei mir immer so...)

Was sagt eigentlich der Callstack - der gibt normalerweise super Hinweise.

Und ja.. Madexcept wirkt Wunder!

lg
Mike

UliTs 2. Jun 2020 13:06

AW: mysteriöse Exception
 
Zitat:

Zitat von blawen (Beitrag 1466057)
...
Hast Du den Namen des Dialogs auch angepasst?

Ja, sonst käme es doch direkt beim Übersetzen zu einer Fehlermeldung :shock:.

UliTs 2. Jun 2020 13:17

AW: mysteriöse Exception
 
Hallo Rabatscher und Sherlock,

vielen Dank für Eure Hinweise. Blöderweise ist mein Englisch nicht das Beste. Aber MadExcept ist nur auf Englisch, richtig? Wird dass bei der Insallation in Delphi eingebunden?
--
Zu dem Hinweis bezüglich Callstack. Ich bin vermutlich zu blöd ... Aber wie kann ich mir den anzeigen lassen?

Uli

haentschman 2. Jun 2020 13:54

AW: mysteriöse Exception
 
Liste der Anhänge anzeigen (Anzahl: 2)
Moin...:P
Zitat:

Aber MadExcept ist nur auf Englisch, richtig?
...falsch und richtig. :zwinker: Die Einstellungen sind auf englisch. Die Fehlertexte kannst du dir, beliebig, auch auf Deutsch einpflegen. :thumb:
Zitat:

Wird dass bei der Insallation in Delphi eingebunden?
Ja. Du kannst auch das projektweise aktivieren oder deaktivieren.
Zitat:

Zu dem Hinweis bezüglich Callstack
Mit madExcept: siehe Bilder.

UliTs 2. Jun 2020 14:03

AW: mysteriöse Exception
 
Ah, danke. Dann werde ich es mal testweise installieren. Ich tappe so völlig im dunkeln :( .
Wenn ich übrigens den Befehl
Code:
FDMoniFlatFileClientLink1.Tracing := True;
hinzufüge, kommt keine Fehlermeldung mehr :roll:.

MyRealName 2. Jun 2020 14:19

AW: mysteriöse Exception
 
Jedi hat sowas auch kostenlos. Muss man auch nicht die ganze Bibliothek einbinden, da gab es ein paar units, die einfach beim Compilieren da sein müssen und ind er uses Liste stehen und fertig, wenn ich mich recht entsinne. Habe das mal bei einem kunden gesehen. Privat nutze ich auch MadExcept.

UliTs 3. Jun 2020 08:18

AW: mysteriöse Exception
 
Zitat:

Zitat von UliTs (Beitrag 1466107)
Ah, danke. Dann werde ich es mal testweise installieren. Ich tappe so völlig im dunkeln :( . ...

Habe es jetzt installiert. Beim Projekt habe ich "Enable MadExcept" angeklickt. Leider kommt die gleiche Fehlermeldung wie bisher ohne auch nur irgendwie zusätzliche Informationen zu liefern. So, als ob MacExcept nicht vorhanden wäre. Hat jemand eine Idee, woran das liegen könnte?

dataspider 3. Jun 2020 08:44

AW: mysteriöse Exception
 
Zitat:

Zitat von UliTs (Beitrag 1466152)
Leider kommt die gleiche Fehlermeldung wie bisher ohne auch nur irgendwie zusätzliche Informationen zu liefern. So, als ob MacExcept nicht vorhanden wäre. Hat jemand eine Idee, woran das liegen könnte?

Das kann auch daran liegen, dass die AV in Units von Fremdkomponenten feuert, welche nicht mit Debug dcu' s kompiliert sind.
Manche Hersteller legen die dcu' s nicht optimal ab...
Abhängig von den Einstellungen Bibliothekspfad/Suchpfad werden die dcu' s von Fremdkomponenten jedesmal neu erstellt oder nicht.

Und im Debugger sollte man wenigstens im Aufruf - Stack die letzte Zeile des eigenen Codes finden.

Frank

UliTs 3. Jun 2020 09:12

AW: mysteriöse Exception
 
Danke.
Nur wie kann ich mir den Aufruf-Stack anzeigen lassen?

UliTs 3. Jun 2020 09:21

AW: mysteriöse Exception
 
Ich habe jetzt einfach eine Division durch 0 provoziert, um zu schauen, ob dann irgend etwas anders mit MadExcept dargestelt wird. Leider nicht :( .
Entweder mache ich noch etwas grundsätzlich falsch bezüglich der Benutzung von MadExcept oder selbiges läuft mit Delphi 10.3 nicht.:shock:

Klaus01 3. Jun 2020 09:47

AW: mysteriöse Exception
 
.. das MadExcept Icon hast Du schon auf Deine Mainform gezogen?

Grüße
Klaus

UliTs 3. Jun 2020 11:17

AW: mysteriöse Exception
 
Zitat:

Zitat von UliTs (Beitrag 1466166)
Ich habe jetzt einfach eine Division durch 0 provoziert, um zu schauen, ob dann irgend etwas anders mit MadExcept dargestelt wird. Leider nicht :( .
Entweder mache ich noch etwas grundsätzlich falsch bezüglich der Benutzung von MadExcept oder selbiges läuft mit Delphi 10.3 nicht.:shock:

Ursache dank Mathias gefunden :-D .
Grund ist die VMWare. Wenn der Quellcode auf einem Laufwerk der VMWar ist, klappt es nicht richtig. Wenn man ihn lokal kopiert, funktioniert es. Siehe auch forum.madshi.net

UliTs 3. Jun 2020 17:43

AW: mysteriöse Exception
 
Leider hat mich MadExcept auch nicht richtig weiter gebracht. Ich habe aber eine Vermutung.

Als Datenbankserver wird der ADS (Advantage Database Server) in der aktuellen Version 12 eingesetzt. Es gibt ein DD (Data Dictionary), in dem die Tabellen zusammengefasst sind und verwaltet werden. Die Tabellen stammen noch aus den 80er-Jahren und sind DBF-Tabellen mit NTX-Indizes. Mindestens bei einer Tabelle kommt zu dem besagten Fehlern. Ich vermute, dass einzelne Datensätze darin korrupt sind und z.B. nicht erlaubte Zeichen enthalten. Die Fehlermeldung entsteht ziemlich sicher im das FireDac-Modul. Im ARC (Data Architekten) kommt es zu keinen Fehlermeldungen.
Nun ist die Frage wie die Tabelle repariert werden könnte...

freimatz 3. Jun 2020 21:42

AW: mysteriöse Exception
 
Zitat:

Zitat von UliTs (Beitrag 1466166)
Ich habe jetzt einfach eine Division durch 0 provoziert, um zu schauen, ob dann irgend etwas anders mit MadExcept dargestelt wird. Leider nicht :( .
Entweder mache ich noch etwas grundsätzlich falsch bezüglich der Benutzung von MadExcept oder selbiges läuft mit Delphi 10.3 nicht.:shock:

Vielleicht wird die Exception von irgendwas abgefangen. madExcept behandet nur unbehandelte Exceptions. Viele Programm fangen weit oben alle Exceptions ab und zeigen dann einen Text an (so wie bei deinem ersten Beitrag). Vielleicht hast Du auch so was drin. Checke mal Application.OnException.

Sinspin 4. Jun 2020 09:06

AW: mysteriöse Exception
 
Zitat:

Zitat von UliTs (Beitrag 1466261)
Nun ist die Frage wie die Tabelle repariert werden könnte...

ReIndex/Pack hat bei uns schon einige Probleme gelößt. Allerdings gabt es immer nur Probleme wenn wir keinen Server für den Zugriff verwendet haben.
Null Zeichen in Strings gab mal Ärger bei der Anzeige in Memos.

Was Du machen könntest, erstmal via ARC, den Inhalt der Tabelle nach HTML oder so exportieren, eventuell wird da was sichtbar und du kannst dich dann um einzelne datensätze kümmern. Oder exportier die Tabelle in eine neue Tabelle und seh ob die noch Probleme macht.

UliTs 4. Jun 2020 15:10

AW: mysteriöse Exception
 
Hallo Freimatz und Sinspin, vielen Dank für Eure Nachrichten.
Inzwischen glaube ich nicht mehr, dass die Tabelle korrupt ist. Ich kann aber zu 100% nachvollziehen, dass es zu dem Fehler kommt, wenn ein Datensatz abgerufen wird, dessen Memo-Feld auch mehr als 1084 Zeichen besteht (mit 1084 funktioniert noch alles!). Deswegen denke ich, dass ich entweder das Firedac-Modul falsch verwende oder in selbigem bezüglich DBF/NTX-Tabellen ein Fehler ist.
Ich forsche weiter :)


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