Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Debugger-Exception (https://www.delphipraxis.net/192915-debugger-exception.html)

H.Bothur 1. Jun 2017 11:00

Debugger-Exception
 
Moin,

beim verlassen meines Programmes (Schliessen durch X im Fensterrahmen) bekomme ich eine Exception der Klasse $C0000005.
Ich nehme an das das etwas mit der Mailroutine zu tun hat die ich nutze da ich das vorher nicht hatte.

Leider verstehe ich bei solchen Dingen aber nur Bahnhof und die Routine ist zugegebenermaßen Copy+Paste. Kann trotzdem jemand einmal kucken ob da noch etwas freigegeben werden muss.

Danke !!
Hans

Delphi-Quellcode:
function TUMailen.SendeMail(MailEmpfaenger, CCListe, Betreff, Anhang :string; Body :TStringList; MailAbsender, MailPasswort, MailServer: String; MailPort: Integer) : boolean;
var
  iAttachment : TIdAttachment;
  Erfolg: Boolean;

begin
  (* Connect mit Server *)
  UMailen.IdSMTP1.AuthType := satDefault;   // simpler Login ohne Authentifizierung
  UMailen.IdSMTP1.Host := MailServer;
  UMailen.IdSMTP1.Port := MailPort;
  UMailen.IdSMTP1.UseTLS := utUseRequireTLS; // mit SSL -> Port dann in aller Regel 587
  UMailen.IdSMTP1.Username := MailAbsender;   // Benutzername
  UMailen.IdSMTP1.Password := MailPasswort;   // Passwort
  // Verbinden mit Server
  try
   UMailen.IdSMTP1.Connect;
  except
   on E: Exception do
    begin
       result := false;
       Application.MessageBox (PChar(E.Message),'Verbindungsfehler Connect !',MB_OK);
       UMailen.IdSMTP1.Disconnect;
       exit;
    end;
  end;

  (* Mail erstellen *)
  UMailen.IdMessage1.ContentType := 'multipart/*';  //  mit Anhang!
  if Anhang <> '' then iAttachment := TIdAttachmentFile.Create(UMailen.IdMessage1.MessageParts, Anhang) ;
  UMailen.IdMessage1.Body.Assign(Body);  // der eigentliche eMail -Text aus einem TMemo
  UMailen.IdMessage1.Priority := TIdMessagePriority(2);  // Priorität
  UMailen.IdMessage1.Recipients.EMailAddresses := MailEmpfaenger;  // Empfängeradresse
  UMailen.IdMessage1.ReplyTo.EMailAddresses := MailAbsender;  // Anwortadresse
  UMailen.IdMessage1.From.Text := MailAbsender;  // Absenderadresse
  UMailen.IdMessage1.Subject := Betreff;

  try
     UMailen.IdSMTP1.Send(UMailen.IdMessage1);

  except
    on E: Exception do
    begin
       result := false;
       Application.MessageBox (PChar(E.Message),'Verbindungsfehler Versand !',MB_OK);
       UMailen.IdSMTP1.Disconnect;
       exit;
    end;
  end;
  result := true;
end;

Ghostwalker 1. Jun 2017 11:36

AW: Debugger-Exception
 
Soweit ich das überblick wird TIdAttachmentFile zwar u.U. angelegt, aber nirgends freigegeben.

H.Bothur 1. Jun 2017 12:38

AW: Debugger-Exception
 
Zitat:

Zitat von Ghostwalker (Beitrag 1373213)
Soweit ich das überblick wird TIdAttachmentFile zwar u.U. angelegt, aber nirgends freigegeben.

Stimmt ... das kann es aber eigentlich nicht sein da bisher kein Anhang erstellt worden ist.

H.Bothur 1. Jun 2017 12:53

AW: Debugger-Exception
 
Stop -es kann nicht an der Routine liegen - auch wenn ich die auskommentiere kommt die exception. Dann suche ich mal weiter :-(

Hans

himitsu 1. Jun 2017 13:45

AW: Debugger-Exception
 
ERROR_ACCESS_DENIED (5) + severity code "Error" ($C000000) = STATUS_ACCESS_VIOLATION ($C0000005)
siehe Windows.pas
Delphi-Quellcode:
{ Error code definitions for the Win32 API functions }
PS: bezüglich Copy&Paste
Man kann Fehlermeldungen auch kopieren und hier als Text einfügen, damit alle Infos hier landen.
Im Delphi-Logfenster oder bei allen Dialogen Strg+C und dann hier im Editor Strg+V :zwinker:

Tipp: In OnCloseQuery, OnClose oder OnDestroy einen Haltepunkt rein, das Fenster schließen und dann schrittweise durchgehn bis es kanllt.
Falls der Debugger hier wirklich nicht die richtige Fehlerstelle direkt anzeigt.

H.Bothur 1. Jun 2017 14:32

AW: Debugger-Exception
 
Danke für die Info .. und vor allem für den Tip. Im Moment werde ich gerade wahnsinnig - es knallt zur Zeit gar nicht. :-(

Sobald es wieder passiert melde ich mich.

Hans

H.Bothur 1. Jun 2017 16:35

AW: Debugger-Exception
 
---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt MahnProjekt.exe ist eine Exception der Klasse $C0000005 mit der Meldung 'access violation at 0x74e342b0: read of address 0x006f64d0' aufgetreten.

Wenn ich einen Haltepunkt in der FormClose setze dann geht er brav dahin und dann noch die ganze .dpr-Datei durch bin zum end.:

Delphi-Quellcode:
begin
  Application.Initialize;
  Application.CreateForm(TMahnForm, MahnForm);
  Application.CreateForm(TUKunden, UKunden);
  Application.CreateForm(TUKunden, UKunden);
  Application.CreateForm(TUDrucken, UDrucken);
  Application.CreateForm(TUProtokoll, UProtokoll);
  Application.CreateForm(TUMailen, UMailen);
  Application.Run;
end.
Mein Fehler irgendwo - ganz klar. Ich habe nur keine Ahnung wonach oder wo ich suchen sollte :-(

Gruß
Hans

himitsu 1. Jun 2017 17:15

AW: Debugger-Exception
 
Nach diesem END. kommen nur noch die Finalization-Abschnitte aller eingebundenen Units.
Um dort zu Debuggen müsste man die Debuginfos der VCL und RTL aktivieren.
> Projektoptionen > Delphi-Compiler > Compilieren > Mit Debug-DCUs
Geht natürlich nur mit einem Delphi ab Professional, wegen der nötigen Quellcodes. (ansonsten bliebe nur noch der Spaß das im Assembler zu debuggen :stupid:)

Ich würde erstmal auf die Units Forms, Controls, Graphics und SysUtils tippen (da ist das Meiste bezüglich VCL drin, was beim Beenden abgearbeitet wird)
Gut, dann hier den Haltepunkt auf's END (muß man davor ja nicht nochmal alles durchlaufen)
und dann ab da weiter. :)

Wenn die Code-Position $74e342b0 und Speicherposition $006f64d0 immer etwa gleich sind, wenn du es mehrmals versuchst, dann könnte man im OnClose oder spätestens beim END. mal an diesen Adressen nachsehen, was sich dort befindent.
Die Speicheradresse natürlich möglichst früh, so lange dort noch etwas existiert. Ich tippe mal darauf, dass an Adresse $006f64d0 nichts mehr existiert (nicht "mehr" zugewiesener Speicherbereich) und es deswegen dann knallt.

Bzw. auf oder kurz vor die Adresse $74e342b0 einen Haltepunkt legen. (im CPU-Fenster des Debuggers, also im Assembler)
Bevor es knallt, hat der Debugger meistens bessere Ergebnisse, beim Versuch den Stacktrace abzurufen.

hoika 1. Jun 2017 19:19

AW: Debugger-Exception
 
Hallo,
arbeitest du mit Interfaces?

Ich würde mal MadExcept nehmen und mit DebugDCUs einstellen.

H.Bothur 1. Jun 2017 21:54

AW: Debugger-Exception
 
Ok, das wird natürlich spannend - ich habe kein Prof. und kann daher den Source auch nicht debuggen.
Ich versuche morgen mal durch auskommender es der ganzen Mailunit ob das wirklich am mailen liegt.
Und dann sehen wir weiter ... vielleicht kann ich so feststellen warum es knallt.

Gruß
Hans


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:02 Uhr.
Seite 1 von 2  1 2      

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