Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi CloseQuery erzeugt exception... Komponentenproblem? (https://www.delphipraxis.net/95886-closequery-erzeugt-exception-komponentenproblem.html)

christian.noeding 15. Jul 2007 11:26


CloseQuery erzeugt exception... Komponentenproblem?
 
Hi Leute,

ich sitze seit etlichen Stunden über einer Exception, die ich mir nicht erklären kann. Sobald mein Programm die Funktion "FormCloseQuery" aufruft, kann ich maximal ein ShowMessage('BLABLABLA') ausführen. Danach kommt sofort eine Zugriffsverletzung, die ich nicht orten kann. Es ist egal, ob ich mit canclose das Beenden verbiete oder nicht - die Exception bleibt da.

Seltsamerweise fährt das Programm auch manchmal ganz normal herunter... demnach vermute ich den Fehler in einer der zahlreichen Komponenten (ein paar Jedis, CHPack, etc.).

Hat jemand so ein Problem schonmal gehabt, bzw. könnte mir Tipps geben, wo ich anfangen soll zu suchen?

Delphi-Quellcode:
procedure TMainform.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
  text:string;
  beenden: TCloseAction;
begin
  ShowMessage('BLABLABLA'); // hiernach krachts im Code... keine Ahnung warum - manchmal klappts auch fehlerfrei(!?!?!?!)
  if messagedlg('Programm jetzt beenden?',mtConfirmation,[mbYes,mbNo],0)=mrNo then
  begin
    canclose:=false;
  end;
end;

Ich nutze unter anderem die JCL Debug-Funktionen und habe zeitgleich die MadException-Erweiterung installiert - hatte bislang aber keine Probleme gemacht. Das Programm nutzt zusätzlich die Delphi-Übersetzungstools. (ich glaube jetzt habe ich die wichtigsten Rahmenpunkt abgearbeitet).


Also ein ganz klares "HILFE"!

Besten Dank für ein paar Ideen.



PS: die Meldung (hilft aber nicht viel):

EAccessViolation
Zugriffsverletzung bei Adresse 004A660F in Modul 'PC_DIMMER.exe'. Lesen von Adresse 20726584.

Christian Seehase 15. Jul 2007 11:33

Re: CloseQuery erzeugt exception... Komponentenproblem?
 
Moin Christian,

da ja der gezeigte Code selber keine Exception hervorrufen kann, muss der Fehler woanders liegen.
Irgendwo wird Speicher überschrieben, evtl. durch ein Missachtung von Array-Grenzen.
Aktiviere doch mal unter Projekt\Optionen die Checkbox bei Range Checking.

Muetze1 15. Jul 2007 11:38

Re: CloseQuery erzeugt exception... Komponentenproblem?
 
Auch aktiviere die Debug-DCUs und gehe mit F7 dem End vom CloseQuery hinterher...

christian.noeding 15. Jul 2007 12:07

Re: CloseQuery erzeugt exception... Komponentenproblem?
 
Hmm, seit dem ich die Debug-DCUs drin habe, ist der Fehler nicht mehr aufgetreten... ich kapier das nicht... FormCloseQuery löscht doch noch keine Elemente oder Ändert was an Arrays...!?

Danke für den Debug-DCU Tipp - damit habe ich schonmal ein Hilfsmittel...

Zacherl 15. Jul 2007 12:12

Re: CloseQuery erzeugt exception... Komponentenproblem?
 
Verwendest du vlt. Threads irgendwo im Programm?

christian.noeding 15. Jul 2007 12:18

Re: CloseQuery erzeugt exception... Komponentenproblem?
 
Jepp - werden die von FormCloseQuery beeinträchtigt? Ich habe drei Threads laufen. Aber das hatte bislang auch keine Probleme gemacht und an den Threads habe ich schon lange nix mehr verändert...

Christian Seehase 15. Jul 2007 14:31

Re: CloseQuery erzeugt exception... Komponentenproblem?
 
Moin Christian,

greifst Du aus den Threads auf die VCL ausserhalb des Threads zu?
Dafür müsstset Du Synchronize verwenden.

christian.noeding 15. Jul 2007 14:39

Re: CloseQuery erzeugt exception... Komponentenproblem?
 
Nein - die Threads verarbeiten nur Daten im Hintergrund. Die Oberfläche wird über andere Timer bei Bedarf aktualisiert. Ich habe mitlerweile extreme Probleme mit Funktionen, die vorher einwandfrei funktioniert haben... scheinbar hat eine Änderungen (neue Komponente) die ich erst kürzlich eingebaut habe irgendwas gemacht... werde jetzt langsam den Code stück für stück zurückbauen, bis ich das weiter orten kann. Mit den Assemblerbefehlen, die mir die Debug-DCUs ausspucken kann ich nix anfangen...

jedenfalls ist mein Programm vor zwei Tagen zu 99% fertig gewesen und jetzt stehe ich vor einem Trümmerhaufen - sporadisch killt sich die Anwendung, Funktionen hauen mir Zugriffsverletzungen um die Ohren - es ist nicht mehr schön.

Problem ist: die Anwendung erzeugt vieles dynamisch, hat Skriptsprachen drin und vieles mehr. Also Quellen für Fehler gibt es sicher reichlich...

Christian Seehase 15. Jul 2007 14:44

Re: CloseQuery erzeugt exception... Komponentenproblem?
 
Moin Christian,

MadExcept hast Du ja schon drin.
Dann könntest Du es noch mit FastMM, MemProof, EurekaLog probieren die Fehlerquelle einzukreisen.

christian.noeding 15. Jul 2007 19:24

Re: CloseQuery erzeugt exception... Komponentenproblem?
 
So, ich hab scheinbar die Fehler gefunden... es war zum Einen ein Problem mit der MadException... nachdem ich diese komplett deinstalliert hatte waren ein paar zufällige Exceptions schonmal weg. Sind nach einer Neuinstallation der Komponente aber auch nicht reproduzierbar - schein, dass hier was an den Source-Dateien selbst schief war... keine Ahnung, warum das genau beim FormCloseQuery aufgetaucht war. Jedenfalls feier ich jetzt :)

Die anderen Fehler waren auf falsche Reihenfolge der Initialisierung zurückzuführen... eine Unterfunktion hat während des FormCreate auf Objekte zugreifen wollen, die noch nicht erstellt waren - klassischer Programmiererfehler also.


Jedenfalls vielen Dank für die Tipps und Infos zu den Debug-Tools - haben sehr geholfen!!



einen schönen Abend noch :)

Christian!


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